首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:连接查找非匹配字段

MySQL:连接查找非匹配字段
EN

Stack Overflow用户
提问于 2014-11-24 16:20:42
回答 2查看 56关注 0票数 0

我有两张桌子。

客户及语音信箱

Customer有两个与这个问题相关的列,ID & Voicemail

Voicemail有两个与这个问题相关的列,ID & Customer

猜测Customer.IDVoicemail.Customer有关,Customer.VoicemailVoicemail.ID无关。

我需要得到Customer.Voicemail == Voicemail.ID where CustomerID != Voicemail.Customer的结果。

我不需要在Customer.Voicemail == Voicemail.IDCustomerID == Voicemail.Customer中返回结果,因为这些结果应该是正确的。

我尝试过使用内部连接,但我可以在其中使用&&吗?当我试图使用连接时,我的心理形象总是变得模糊。

架构以帮助:

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

Voicemail
+---+---------+
|ID | Customer|
+---+---------+ 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 16:42:30

从您的模式中猜测一点,看起来您想要这个查询。

代码语言:javascript
复制
SELECT v.ID AS Voicemail_ID,
       c.ID AS Customer_ID, 
       c.some_other_field, 
       v.some_other_field
  FROM Voicemail AS v
 INNER JOIN Customer AS c ON v.ID = c.Voicemail
 WHERE c.ID <> v.Customer

这将为每个语音信箱行引入所有相关的客户行,然后丢弃客户已经指向语音邮件的行。

提示:对表和列使用相同的名称可能会让人感到困惑。如果我是你,我会重做这样的列名

代码语言:javascript
复制
Customer:   Customer_ID (pk), Voicemail_ID, other columns

Voicemail:  Voicemail_ID (pk), Customer_ID, other columns

然后,您可以像这样重写查询:

代码语言:javascript
复制
SELECT v.Voicemail_ID,
       c.Customer_ID,
       c.some_other_field,
       v.some_other_field
  FROM Voicemail AS v
 INNER JOIN Customer AS c USING(Voicemail_ID)
 WHERE c.Customer_ID <> v.Customer_ID

对于下一个在您的项目中工作的人来说,这可能更容易理解。

票数 2
EN

Stack Overflow用户

发布于 2014-11-24 16:33:48

我认为你可以这么做:

代码语言:javascript
复制
  INNER JOIN Voicemail ON Customer.Voicemail = Vocemail.id AND Customer.id != Voicemail.Customer

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27109342

复制
相关文章

相似问题

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