2016-03-21 23 views
1

projemde bu tür bir sorguyu yürütmek istiyorum ancak hata döndürüyor, lütfen bana yardım edin. Bu tür bir sorgunun yürütülmesini istiyorum. sorguda yukarıdakialt sorgu veya koşul çalışmıyor

SELECT 
    * 
FROM 
    company_details 
WHERE 
    com_id NOT IN (SELECT com_id FROM com_size) 
OR (SELECT com_id FROM com_cat) 

hata verir ve ben company_details mevcut ancak com_size veya com_cat table.and i de bu deneyin com_id istiyorum.

SELECT 
    * 
FROM 
    company_details 
LEFT JOIN com_size ON com_size.com_id != company_details.com_id 
LEFT JOIN com_cat ON com_cat.com_id != company_details.com_id 

cevap

1

Not: Muhtemelen not in yerine not exists kullanmalıdır:

select cd.* 
from company_details cd 
where not exists (select 1 from com_size cs where cs.com_id = cd.com_id) and 
     not exists (select 1 from com_cat cc where cc.com_id = cd.com_id); 

nedeni not exists iyidir çünkü içinde NULL değerlerini nasıl işleyeceğini taşımaktadır alt sorgu: Değerlerden herhangi biri NULL ise, tüm karşılaştırmalar başarısız olur ("false" veya NULL).

Ek olarak, not exists MySQL'de daha hızlıdır.

1

bu deneyin:

select * from company_details 
where 
    com_id not in (select com_id from com_size) AND 
    com_id not in (select com_id from com_cat)