我有两张桌子。
客户&语音邮件
Customer
有2列与此问题有关,ID
& Voicemail
。
Voicemail
有2列与此问题相关,ID
& Customer
。
没有奖品可以猜测Customer.ID
与Voicemail.Customer
有关,Customer.Voicemail
与Voicemail.ID
有关。
我需要获得Customer.Voicemail
== Voicemail.ID
而CustomerID
!= Voicemail.Customer
的结果。
我不需要在Customer.Voicemail
== Voicemail.ID
CustomerID
== Voicemail.Customer
时返回结果,因为它们应该是正确的。
我尝试过使用INNER JOIN,但是我可以使用&&
吗?尝试使用连接时,我的心理图像总是模糊
架构帮助:
Customer
+---+---------+
|ID |Voicemail|
+---+---------+
Voicemail
+---+---------+
|ID | Customer|
+---+---------+
答案 0 :(得分:2)
从您的架构中稍微猜一下,看起来您想要这个查询。
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
这将为每个语音邮件行提取所有相关的客户行,然后丢弃客户已指回语音邮件的行。
专业提示:对表和列使用相同的名称可能会造成混淆。如果我是你,我会像这样重做列名
Customer: Customer_ID (pk), Voicemail_ID, other columns
Voicemail: Voicemail_ID (pk), Customer_ID, other columns
然后你可以像这样重写你的查询:
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
对于您的项目的下一个人来说,这可能更容易理解。
答案 1 :(得分:0)
我认为你可以做到:
INNER JOIN Voicemail ON Customer.Voicemail = Vocemail.id AND Customer.id != Voicemail.Customer
希望它有所帮助!