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

时间:2018-12-20 10:14:00

标签: mysql join

我有两个表,想要加入这些表。
列名旁边的(*)表示它是主键,(**)表示外键

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

每个ID_VEND应该有五个ID_DOC,我想知道每个ID_VEND中缺少哪个ID_DOC

我使用此查询:

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 个答案:

答案 0 :(得分:0)

只需切换表顺序即可。 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'

答案 1 :(得分:0)

您的“ ON”条件使查询仅检索table_vendor_document的外键等于table_document的主键的行。在VEND03行中,只有两个外键:DOC03和DOC04。 VEND03行未引用table_document的任何其他行,因此才得到这样的结果。