2016-03-21 22 views
1

私のプロジェクトでこのタイプのクエリを実行したいのですが、エラーが返されるので、助けてください。このタイプのクエリを実行します。クエリ上記サブクエリまたは条件が機能していません

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

エラーを返し、私はcompany_detailsであるが、com_sizeまたはcom_catのtable.andに私もこれを試してみてcom_idをしたいです。

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 

答えて

1

注:おそらくnot inではなくnot existsを使用する必要があります。

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); 

理由not existsが優れているがために、それはでNULL値を処理する方法でありますサブクエリ:いずれかの値がNULLの場合、すべての比較が失敗します( "false"またはNULL)。

追加のボーナスとして、not existsがMySQLでより高速になることがよくあります。

1

これを試してみてください:

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) 
関連する問題