2012-10-12 105 views
0

我如何加入表a和表b並獲得每個記錄?不是真正的加入...不知道這是什麼。加入兩個不同的表?

所以,如果我有a 3記錄和b 5記錄,我想要回8條記錄。

a的記錄中,所有b字段都可以爲空。在b的記錄中,所有a字段都可以爲空。


編輯:我的表有不同的字段。

Error Code: 1222. The used SELECT statements have a different number of columns 
+0

錯誤是因爲您的兩個select都沒有相同的列。他們必須是相同的類型和順序。 – Marc

回答

2

像mentionned別人,你需要一個工會

SELECT intColumn, varcharColumn, intColumn FROM a 
UNION 
SELECT intColumn, varcharColumn, 0 FROM b 

但是你必須具有相同數量的列,並且它們也必須具有相似的數據類型。

Here's一個很好的教程吧

另外,如果你想不在兩個表中的列,您可以用null或常量填寫。

+0

我可以通過選擇空值來匹配我的列嗎? 'SELECT NULL as field_that_this_table_doesnt_have' –

+0

是的,你可以,我更新了我的答案。您可以在選擇中添加常量。我沒有MySQL,但它在sql server 2010中工作,我只是試過。 – Marc

1

你想要一個UNION

SELECT something FROM a 
UNION 
SELECT something FROM b 
+4

使用'UNION ALL'確保在表中包含相同的值時不會刪除重複項。 –

1

試試這個

SELECT * FROM a 
LEFT JOIN b ON a.id1 = b.id2 
UNION 
SELECT * FROM a 
RIGHT JOIN b ON a.id1 = b.id2 

只要確保,A和B具有不同的ID

編輯:Working Fiddle

您還可以使用其它一些其他的領域則id不屬於相同的兩個表

編輯:更新小提琴

+0

sqlfiddle?太好了,謝謝。 –