如何在没有任何引用值的情况下使用join获取表值?

wj8zmpe1  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(360)

我有两个表,想把它们连接起来。
列名旁边的(*)表示它是主键,(**)表示外键

//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
zfycwa2u

zfycwa2u1#

您的“on”条件使查询只检索表\供应商\文档的外键等于表\文档主键的行。在vend03行中只有两个外键:doc03和doc04。vend03行不引用表\文档的任何其他行,这就是为什么会得到这样的结果。

shyt4zoc

shyt4zoc2#

只需切换表顺序。 table_vendor_document left join table_document .

SELECT table_vendor_document.ID_VEND,table_document.ID_DOC FROM `table_vendor_document` 
LEFT OUTER JOIN table_document
    ON table_document.ID_DOC = table_vendor_document.ID_DOC 
WHERE table_vendor_document.ID_VEND = 'VEND03'

相关问题