2014-11-24 41 views
0

我有兩個表。MySQL:加入找到不匹配的字段

客戶&語音信箱

Customer有2列,涉及到這個問題,ID & Voicemail
Voicemail有2列涉及到這個問題,ID & Customer

沒有猜測Customer.ID涉及Voicemail.CustomerCustomer.Voicemail涉及Voicemail.ID的獎品。

我需要獲得結果,其中Customer.Voicemail == Voicemail.IDCustomerID!= Voicemail.Customer

我不需要結果返回,其中Customer.Voicemail == Voicemail.IDCustomerID == Voicemail.Customer,因爲它們應該是正確的。

我試過使用INNER JOIN,但是可以使用&&嗎?欲以加入

架構,以幫助時,我的精神形象總是很模糊:

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

Voicemail 
+---+---------+ 
|ID | Customer| 
+---+---------+ 
+1

只是對你的表格結構發表評論,他們爲什麼要這樣鏈接回彼此?你是否想創建一個多對多的關係? – AdamMc331 2014-11-24 16:56:02

+1

我的桌子並不像這樣,桌子很大,用於電信目的。我不是原設計師 – 2014-11-24 17:37:36

+0

只是好奇而已,我認爲還有更多。感謝您削減必要的專欄! – AdamMc331 2014-11-24 17:40:22

回答

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 

這可能是對你的項目,瞭解工作旁邊的人更容易。

0

我想你可以簡單地做:

INNER JOIN Voicemail ON Customer.Voicemail = Vocemail.id AND Customer.id != Voicemail.Customer 

希望它能幫助!

+0

我會加入customer.voicemail嗎?或者只是客戶? – 2014-11-24 16:37:09

+0

我接受這個答案,因爲它是第一個迴應,謝謝你的幫助 – 2014-11-25 09:31:12

+0

顯然你已經接受了其他,但沒關係,我只是一個新人幫助! :) – 2014-11-26 09:25:50