在我的项目中,我想执行这种类型的查询,但它返回错误,所以请帮助我。我希望执行这种类型的查询。
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
最佳答案
注意:您可能应该使用 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 中通常更快。
关于mysql - 子查询或条件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130073/