子查询或条件不起作用

时间:2016-03-21 11:39:57

标签: mysql database

在我的项目中我想执行这种类型的查询,但它返回错误,所以请帮助我。我想要执行这种类型的查询。

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

上面的查询返回错误,我希望com_id在company_details中但不在com_size或com_cat表中。我也尝试这个。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

注意:您应该使用not exists而不是not in

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中通常更快。