2016-04-06 3 views
1

Ich versuche eine MySQL-Abfrage zu schreiben, um alle Zeilen einer Tabelle auszuwählen, in der die Eins-zu-Eins-Beziehungsspalte 0 einer Eins-zu-Viele-Beziehung ist . basicaly ich will alles führt, wo noch nicht abgeschlossen ist 1.SQL, wo die Spalte kein Wert in einer Eins-zu-Eins-Beziehung ist

Mein Fehler Abfrage

SELECT * from `leads` 
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id` 
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id` 
AND `call_result_codes`.`finished` in (0) group by `leads`.`id` 

Dies schlägt fehl, und immer noch gibt alle führt, auch wenn sie einen Code mit fertig 1.

Erwartete Ausgabe haben würde

Führung mit ID 12 und führen sein mit id 2.

Tabelle führt

_____________________ 
|id | name   | 
|2 | test name  |     
|8 | test name2 | 
|12 | test name2 | 

Tabelle call_lead

_____________________________________________________ 
|id | lead_id | user_id | call_result_code_id |remark| 
|22 | 8  | 1  | 0     |test | 
|23 | 8  | 1  | 1     |test | 
|24 | 2  | 1  | 0     |test | 

Tabelle call_result_codes

________________________________ 
|id | description | finished | 
|0 | not answering | 0  |     
|1 | not interested| 1  |    

Antwort

1

Sie können EXISTS() verwenden:

SELECT * FROM `leads` 
LEFT OUTER JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id` 
WHERE NOT EXISTS(SELECT 1 FROM `call_result_codes` 
       WHERE `call_lead`.`call_result_code_id` = `call_result_codes`.`id` 
        AND `call_result_codes`.`finished` = 1) 

Ich nahm an, indem Sie Ihre erwartete Ausgabe, die Sie diejenigen wollen, die keinen Datensatz in call_results_codes auch hat, so dass ihr Genug, dass sie dort keinen Datensatz mit Fertig = 1 haben.

+0

Das funktioniert wie erwartet vielen Dank! – Maantje

+0

Kein Problem! @marsje – sagi

+0

Fehler gefunden. Wenn call_lead einen Datensatz für einen Lead mit einem Ergebniscode, der nicht abgeschlossen ist, und einen für den Abschluss für den gleichen Lead hat, wird er immer noch zurückgegeben. – Maantje

0

versuchen dies. Sie haben die Finish-Spalte im Join-Zustand. Ich habe in dem das Ergebnis finden

SELECT * from `leads` 
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id` 
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id` 
WHERE `call_result_codes`.`finished` = 0 
group by `leads`.`id` 
Verwandte Themen