我有两个简单的表格:
id | txt
---+----
0 | aaa
1 | bbb
2 | ccc
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)
答案 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。