我有两个表,想把它们连接起来。
列名旁边的(*)表示它是主键,(**)表示外键
//table_document
ID_DOC* DOC STATUS
DOC01 AAA 1
DOC02 BBB 1
DOC03 CCC 1
DOC04 DDD 1
DOC05 EEE 1
//table_vendor_document
NO* ID_VEND** ID_DOC**
1 VEND01 DOC01
2 VEND01 DOC02
3 VEND01 DOC03
4 VEND01 DOC04
5 VEND01 DOC05
6 VEND02 DOC01
7 VEND02 DOC02
8 VEND02 DOC05
9 VEND03 DOC03
10 VEND03 DOC04
每个身份证供应商都应该有五个身份证文件,我想知道每个身份证供应商缺少哪个身份证文件
我使用此查询:
SELECT table_vendor_document.ID_VEND,table_document.ID_DOC FROM `table_document`
LEFT OUTER JOIN table_vendor_document
ON table_document.ID_DOC = table_vendor_document.ID_DOC
WHERE table_vendor_document.ID_VEND = 'VEND03'
结果是:
ID_VEND ID_DOC
VEND03 DOC03
VEND03 DOC04
我的预期结果应该是:
ID_VEND ID_DOC
VEND03 NULL
VEND03 NULL
VEND03 DOC03
VEND03 DOC04
VEND03 NULL
2条答案
按热度按时间zfycwa2u1#
您的“on”条件使查询只检索表\供应商\文档的外键等于表\文档主键的行。在vend03行中只有两个外键:doc03和doc04。vend03行不引用表\文档的任何其他行,这就是为什么会得到这样的结果。
shyt4zoc2#
只需切换表顺序。
table_vendor_document left join table_document
.