2012-02-17 102 views
0

什么是这个替代MySQL的UNION

替代,而无需使用UNION?我们遇到的问题是我们必须从table_a中选择更多的行,并且UNION必须有行#match。我们可以通过选择不同的行来伪造table_b中的行,但是当我们有7或8个表进行混合并且它们都没有相同数量的行或匹配的名称时,它会变得混乱。我们不能使用JOIN,因为我们已经注意到了它们。

谢谢!

+0

您可以使用连接,只需对条件进行硬编码即可关于SomeField ='Fred',以避免获得笛卡尔产品。拥有7或8张桌子的课程将与您拥有的技巧一样多。 – 2012-02-17 17:06:38

+0

方式很多,因为我也有PHP的条件,至于什么表不包括 – Benn 2012-02-17 17:31:12

回答

6

您可以用空,或其他一些常量有意义正是如此填空:

SELECT a, b, c, d FROM t1 
UNION 
SELECT a, b, null, 0 FROM t2 
UNION 
SELECT '', b, c, 1 FROM t3 
+0

他不想要它没有任何联盟声明... – hackartist 2012-02-17 17:13:04

+4

他想要什么可能不是他所需:-) – Andrew 2012-02-17 17:17:02

+0

我同意他可能需要一个工会来做到这一点,所以在你的答案中说,为什么使用UNION实际上是最好的方法来做到这一点。 – hackartist 2012-02-17 17:17:55

0

你可以这样做:

...UNION SELECT i.name AS title,'empty' AS category FROM table_b WHERE REGEXP 'news' 

你所选择不必有必要的一列。如果你必须在一个结果中使用UNION 7或8表,可能会改善你的底层数据模型,但也许你不能改变它?

+0

我不认为模型可以改进比现在更多,因为没有任何表匹配任何其他表,这是与PHP条件AJAX搜索排除特定的。所以UNION是最简单的方法。 – Benn 2012-02-17 17:33:31