2016-07-06 67 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; 
相关问题