2016-07-06 63 views
1

不知道如何正確解釋這一點,但在這裏。如果存在其他條件,MySQL列表中只有2個表格匹配

我有這些表:

消息:

------------------------ 
|msgid|clientid|message| 
------------------------ 
|1 |536  |Hello | 
------------------------ 
|2 |543  |Hello | 
------------------------ 
|3 |529  |Hello | 
------------------------ 

客戶:

---------------------- 
|cleintid|wholesaleid| 
---------------------- 
|536  |479  | 
---------------------- 
|543  |480  | 
---------------------- 
|529  |479  | 
---------------------- 

我只想拉記錄從信息表,如果在消息記錄的客戶端ID由clients.wholesaleid = 479.

因此,應拉記錄1和3個來自消息表。

我知道如何處理完全獨立的多個嵌套查詢,但我知道有一種更智能的方法可以在一個查詢中使用純SQL執行此操作。我一直在學習這個方法太久,所以我在這裏弄明白這一點。

通常我會做什麼在這個情況下是通過做客戶表的簡單查詢和循環尋找匹配的批發ID的所有客戶端的ID。我會把它們全部放在一個數組中,或者,當我循環它們時,爲所有這些客戶機ID的消息做一個單獨的查詢。這很糟糕,我知道有一個更好的方法。如果我的數據集變大,則循環內的循環次數會減少,而且會變慢。

我知道這是不是正確的,但我希望這將有助於說明什麼,我試圖做的。

像這樣的事情,但沒有多重循環:

SELECT * FROM客戶WHERE wholesaleid = 479;

For Each Loop Here 

    SELECT * FROM messages WHERE clientid=ThisClientID 

    For Each Loop #2 HERE 

     Print msgid, clientid, message 

    End For Each Loop #2 

End For Each Loop 

對不起,這是如此混亂,只是不知道如何更好地解釋我現在怎麼做,以及我在哪裏試圖獲得。

我在猜測每個人都會告訴我去學習JOINS,但是我花了很多時間在這方面,我不確定它是如何應用的,如果對我所要完成的東西有所瞭解的話。

+1

一個簡單的連接是你需要 – 2016-07-06 02:56:05

回答

2

使用INNER JOIN(表clientscleintid可能是你的問題一個錯字):

SELECT messages.* 
FROM messages 
INNER JOIN clients 
ON messages.clientid = clients.cleintid 
AND wholesaleid = 479; 

SQLFiddle Demo

0

你可以加入這兩個表

SELECT m.* 
FROM messages m 
INNER JOIN clients c 
ON m.clientid = c.clientid 
AND c.wholesaleid = 479; 
相關問題