首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:匹配不存在的记录

MySQL:匹配不存在的记录
EN

Stack Overflow用户
提问于 2014-11-25 13:10:03
回答 6查看 52关注 0票数 0

我有两张桌子:

代码语言:javascript
复制
Customer
+---+-----------+
|ID |VoicemailID|

Voicemail
+---+----------+
|ID |CustomerID|

Voicemail.CustomerIDCustomer.ID相关,而visa则相反。

如何从Customer表中选择行,其中Customer.VoicemailID不再是Voicemail表中的有效记录?

在这种情况下,记录过去存在于Voicemail表中,但后来被删除。现在,我需要在Customer表中找到所有具有不存在记录的VoicemailID的记录。

我试过:

代码语言:javascript
复制
SELECT DISTINCT Customer.ID, Customer.VoicemailID
FROM Customers LEFT JOIN Voicemail ON Customer.VoicemailID <> Voicemail.ID

然而,我相信它会返回我想要的结果,与语音邮件实例仍然存在的结果混合在一起。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-11-25 13:12:47

这应该会给出您想要的结果:

代码语言:javascript
复制
SELECT Customer.ID, Customer.VoicemailID
FROM Customer
   LEFT JOIN Voicemail ON Voicemail.ID = Customer.VoicemailID
WHERE Voicemail.ID IS NULL
票数 1
EN

Stack Overflow用户

发布于 2014-11-25 13:12:28

你在正确的轨道上与LEFT JOIN。但是,您需要查找匹配项,然后在失败时返回:

代码语言:javascript
复制
SELECT c.ID, c.VoicemailID
FROM Customer c LEFT JOIN
     Voicemail v
     ON c.VoicemailID = v.ID
WHERE v.ID IS NULL;
票数 2
EN

Stack Overflow用户

发布于 2014-11-25 13:12:38

您可以使用子查询并查找不存在的行。检查WHERE NOT EXISTS在MySQL 文档上的语法

代码语言:javascript
复制
SELECT *
FROM table
WHERE NOT EXISTS(SELECT 1
                 FROM otherTable 
                 WHERE table.id = otherTable.someField )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27127669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档