2011-06-07 35 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

相关问题