加入2个表并显示所有内容

时间:2009-12-25 20:52:26

标签: sql mysql ms-access

我有两个简单的表格:

表a:

id | txt
---+----
0  | aaa
1  | bbb
2  | ccc

表b:

id | tel
---+----
0  | 000
2  | 111

我正在尝试加入这样的2个表:

SELECT a.*,b.* 
  FROM a,b 
 WHERE a.id=b.id

有效,,如果“b”表中没有条目,它就不会显示任何内容。

sql显示的内容是这样的:

id | txt | tel
---+-----+----
0  | aaa | 000
2  | ccc | 111

我还想列出“空”行a.id = 1:

id | txt | tel
---+-----+-----
1  | bbb | NULL

有什么想法吗?谢谢! (SQL适用于MS Access / oledb)

3 个答案:

答案 0 :(得分:2)

在MS Access查询设计器中,右键单击两个表之间的关系连接,然后编辑其属性。将其修改为“显示表a中的所有记录”。

答案 1 :(得分:2)

如果您想要a表中没有条目的行,您需要left outer join(或完整的外部联接)。

SELECT a.*,b.* FROM a LEFT OUTER JOIN b ON a.id=b.id

根据系统的不同,语法LEFT JOIN也可以正常工作。

答案 2 :(得分:1)

此:

SELECT a.*,b.* 
  FROM a, b 
 WHERE a.id = b.id

...是ANSI-89内连接语法,我强烈建议使用ANSI-92语法:

SELECT a.*,
       b.*
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

...主要是因为用于左连接到表的ANSI-88语法并未在各种数据库上一致地实现。这将返回您期望的结果:

   SELECT a.id,
          a.txt,
          b.tel
     FROM TABLE_A a
LEFT JOIN TABLE_B b ON b.id = a.id

LEFT JOIN意味着您将在此示例中获取TABLE_A中的所有记录,并且当TABLE_B中存在匹配记录(基于ON条件)时,将显示该值。否则,TABLE_B列引用将返回NULL值。

有关JOIN的详细信息,请参阅this page for a great pictorial demonstration of what each one represents and how they compare