Mysql 如何在没有任何引用值的情况下使用JOIN获取表值?
我有两个表,想加入这些表。Mysql 如何在没有任何引用值的情况下使用JOIN获取表值?,mysql,join,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
列名称旁边的(*)表示它是主键,(**)表示外键
//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供应商应该有五个ID文档,我想知道每个ID供应商缺少哪个ID文档
我正在使用此查询:
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
只需切换表顺序<代码>表\u供应商\u文档左连接表\u文档
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'
您的“ON”条件使查询只检索表\供应商\文档的外键等于表\文档主键的行。在VEND03行中只有两个外键:DOC03和DOC04。VEND03行不引用表_文档的任何其他行,这就是为什么会得到这样的结果 我仍然没有得到想要的输出。了解左联接返回的内容:内部联接行加上由null扩展的不匹配左表行。始终知道作为左连接的一部分,您需要什么样的内部连接。一个WHERE或INTERNAL ON,在左联接ON删除任何由NULL扩展的行后,要求右表列不为NULL,即只保留内部联接行,即“将左联接转换为内部联接”。你有。你的可能复制品没有清楚地解释你想要什么作为输出。“每个ID供应商缺少哪个ID文件”不清楚。使用足够多的单词、句子和引用部分例子,使其清晰明了。显然:由于您的示例在ID_DOC中为NULL,因此任何一个表都可以是左连接的右表;但如果ID\u VEND中的值不为NULL,则不希望表\u vendor\u文档作为正确的表;所以,您希望表_文档作为正确的表。另外:为什么要编写
表\u vendor\u document.ID\u VEND='VEND03'
&如果您说“每个ID\u VEND”,则只显示VEND03行&缺少VEND02行?还有:你的头衔是难以理解的。PS在唯一的供应商ID和唯一的文档ID之间进行交叉连接,以获得所有可能的组合。然后使用反连接查找缺少的连接。