2016-07-06 3 views
1

Nicht sicher, wie man das genau erklärt, aber hier geht.MySQL 2 Tabellen mit gemeinsamer Spalte passen nur zusammen, wenn andere Bedingung existiert

Ich habe diese Tabellen:

Nachrichten:

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

Kunden:

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

Ich mag nur Datensätze aus der Tabelle Nachrichten ziehen, wenn die Client-ID in der Nachrichtenaufzeichnung ist im Besitz von clients.wholesaleid = 479.

Also das sollte Datensätze 1 ziehen und 3 aus der Nachrichtentabelle.

Ich weiß, wie man mit völlig separaten verschachtelten Abfragen arbeitet, aber ich weiß, dass es eine klügere Möglichkeit gibt, dies mit reinem SQL in einer Abfrage zu tun. Ich habe es viel zu lange gelernt, also bin ich hier, um das herauszufinden.

Normalerweise würde ich in diesen Fällen eine einfache Abfrage durchführen und die Client-Tabelle durchlaufen, um nach allen Client-IDs zu suchen, die mit der Großhandels-ID übereinstimmen. Ich würde sie alle in ein Array stopfen oder, während ich sie durchlaufe, eine getrennte Abfrage für alle Nachrichten für diese eine Client-ID durchführen. Es ist ekelhaft und ich weiß, dass es einen besseren Weg gibt. Tonnenweise Schleifen, innerhalb von Schleifen und langsam, wenn mein Datensatz groß wird.

Ich weiß, das ist nicht korrekt, aber ich hoffe, es wird helfen, zu veranschaulichen, was ich versuche zu tun.

So etwas aber ohne mehrere Schleifen:

SELECT * FROM Kunden WHERE wholesaleid = 479;

Sorry das ist so verwirrend, nur nicht sicher, wie ich besser erklären kann, wie ich es jetzt mache und wo ich versuche zu bekommen.

Ich vermute, dass jeder mir sagen wird, JOINS zu lernen, aber ich habe viel Zeit damit verbracht, und ich bin nicht sicher, wie es überhaupt gilt für das, was ich zu erreichen versuche.

+1

eine einfache Verknüpfung ist alles, was Sie brauchen –

Antwort

2

Verwenden INNER JOIN (cleintid in Tabelle clients könnte ein Tippfehler in Ihrer Frage):

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

SQLFiddle Demo

0

Sie können diese zwei Tisch JOIN

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