mysql - 子查询或条件不工作

标签 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

最佳答案

注意:您可能应该使用 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/

相关文章:

c# - 如何在数据库中存储稀疏 bool 向量?

java - 在网络应用程序中上传图像

database - 将 xml 嵌套到表中

javascript - 如何显示上传带有不需要的扩展名的文件的错误?

mysql - 可以通过 PHPMyAdmin 访问 MySQL,但不能通过命令行访问

mysql - 想要在子查询中使用 Between 子句

php - Ajax响应错误

mysql - 从 MySQL 中选择过去 24 小时内的行并根据间隔 X 跳过行?

java - package com.mysql.jdbc.PreparedStatement; 之间有什么区别?和 java.sql.PreparedStatement?

django - Django 中具有唯一约束的软删除