2011-06-07 58 views
0

我有兩個表:加入不同數量的行的兩個表中的MySQL

--------- 
|dogs | 
--------- 
|item_1 | 
|  | 
|  | 
|  | 
--------- 

--------- 
|cats | 
--------- 
|item_1 | 
|item_2 | 
|item_3 | 
|item_4 | 
--------- 

,所以我想加入的表是這樣的:

------------------ 
|dogs | cats | 
------------------ 
|item_1 | item1 | 
|NULL | item2 | 
|NULL | item3 | 
|NULL | item4 | 
------------------ 

我在第二使用條件表,但如果沒有發現我仍然想從第一個表中得到那個單一的結果是這樣的:

------------------ 
|dogs | cats | 
------------------ 
|item_1 | NULL | 
------------------ 

表格做沒有ID字段,但我也可以添加一個ID來建立項目之間的關係。

我已經嘗試過不同的解決方案,但是如果在使用條件(我得到0行)時沒有在第二個表中找到任何內容,我無法保留第一個表的單個結果,或者我重複item1在第一個表中,當我真的需要空值時。

+0

對於第三個例子,你是否想要item_5而不是item_1?否則,你的SQL語句(你試過的)可能有助於澄清你想要實現的邏輯。 – 2011-06-07 16:55:24

+0

在第三個示例中,我只想從第一個表中獲取單個行,以防使用WHERE條件從cat中找到任何內容。 – Danny 2011-06-07 17:01:45

+0

我想你想要做的事情是他的回答中提出的建議(所以我給它+1)。 – 2011-06-07 19:21:12

回答

1
select * 
from dogs left outer join cats 

這會給你所有的狗和任何匹配的貓。這意味着Cat列可以爲空,但是狗列不能。這是你想要的?

+0

該查詢不起作用。 – Danny 2011-06-07 16:58:12

+1

@丹尼,我遺漏了聯合聲明,因爲你沒有給我列名加入。爲了使查詢起作用,請在最後一行添加以下內容:'on dogs。[dogscolumnname] = cats。[catscolumnname]'用括號替換括號中的文本和相應的列名稱。 – therealmitchconnors 2011-06-07 18:30:12

0

向兩個表中添加標識時,可以使用SQL left join來匹配從右表到左表的所有數據。

從W3Schools的:

的LEFT JOIN關鍵字返回左表(table_name1)的所有行,即使在右表(table_name2)不匹配。

+0

好的,但假設我在兩張表中都沒有ID? – Danny 2011-06-07 16:57:45

+0

然後,您必須加入兩個表中可用的另一個字段。但我建議你使用id,這在未來也容易得多。 – Ray 2011-06-07 17:01:23

+0

但是在這種情況下,兩個表都沒有共同之處。 – Danny 2011-06-07 17:05:11

相關問題