2016-04-06 19 views
1

Birebir bir ilişki sütununun birebir çok ilişkisi olduğu bir tablonun tüm satırlarını seçmek için bir mysql sorgusu yazmaya çalışıyorum . temelde i bitmiş tüm yol açar değildir istiyorum 1.SQL sütun, bir çok ilişkiden bire bir değer değil

My başarısız sorgu

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` 

Bu başarısız olur ve hala tüm bunlar bitmiş 1.

Beklenen çıkışı ile bir kod olsa bile açar döndürür id 12 ile

kurşun olmalı ve kimliği ile yol açacak 2.

Tablo

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

Tablo 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 | 

Tablo call_result_codes

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

cevap

1

bulmak için nereye koymak:

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) 

senin de call_results_codes bir kaydı yok olanlar istediğiniz beklenen çıkışı üstlendiği, böylece onun bitmiş = 1

+0

ile bir rekoru olmadığı için bu çok beklediğiniz gibi çalışıyor! – Maantje

+0

Sorun değil! @marsje – sagi

+0

Şimdi bir hatayla karşılaştık. Call_lead'in, sonuç kodunun bitmemiş bir sonucu için bir kaydı olduğu ve aynı kurşunu bitirmek için bir kaydı olduğu zaman, yine de döndürülür. – Maantje

0

bu deneyin açar. Birleştirme koşulunda bitiş sütununuz var. i EXISTS() kullanabilirsiniz bir sonuç

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`