2012-06-28 62 views
2

我有兩個表服務member_services的MySQL:查詢不會返回正確的結果

services

enter image description here

member_services取記錄,其中member_type_id = 1我寫了

SELECT s.* FROM member_services ms 
LEFT JOIN services s 
ON s.ser_id = ms.ser_id 
WHERE ms.mem_id = 1 && ms.pro_id = 9 && ms.member_type_id = 1 

但它返回

enter image description here

爲什麼它返回記錄與member_type_id 2

我在查詢中做了什麼錯誤?

回答

0

你查詢的罰款。之所以返回member_type_id = 2是因爲你有一排服務叫做member_type_id,它不對應於member_services中的member_type_id。

這裏真正的問題是兩個表之間的數據衝突。如果它們應該是相同的數據,則最好使用外鍵將它們鏈接起來。

+0

準確的好友感謝指出衝突。 –

0

試試這個:

SELECT s.* FROM member_services ms LEFT JOIN services s 
ON ms.ser_id = s.ser_id AND ms.member_type_id = s.member_type_id 
WHERE ms.mem_id = 1 AND ms.pro_id = 9 AND ms.member_type_id = 1 
0

試試這個查詢,而不是:

SELECT s.* FROM member_services ms 
LEFT JOIN services s 
USING(ser_id,member_type_id) 
WHERE ms.mem_id = 1 && ms.pro_id = 9 && s.member_type_id = 1 

我改變了ON一個通過()因爲字段被稱爲是相同的,它是一種快捷的。

另一個區別是使用兩個字段進行連接(如做ON s.ser_id = ms.ser_id AND s.member_type_id = ms.member_type_id)。這樣的過濾器正確應用。

最後一項更改是在WHERE子句中,在服務表上篩選member_type_id = 1而不是在member_services表上執行。我的意思是將ms別名改爲s)。

我希望它有幫助。讓我知道你是否需要進一步的幫助。