2012-02-17 141 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