MySQL查询以列出不是特定类型的项目

标签 mysql exists not-exists

我正在尝试在我们的数据库中获取account_level IN ('basic', 'full') 的公司列表。我们的客户是 account_level = 'enterprise'。在许多情况下,企业客户在数据库中也会有行,那时它们是基本的或完整的,所以我想排除任何也有企业行的基本/完整公司(即我想排除我们当前的客户)。通过这种方式,我可以获得严格基本或完整的公司列表,实际上还不是我们的客户。

这是公司表的示例:

1    company a    basic
2    company a    full
3    company b    basic
4    company b    enterprise
5    company c    basic

我希望查询返回公司 a 和 c。

我正在尝试使用:

    SELECT * 
    FROM company c1  
    INNER JOIN company c2 ON c1.id=c2.id
    WHERE c1.company NOT IN  (SELECT c2.company FROM company c2       
    WHERE account_level = 'enterprise')
    AND c1.account_level IN ('full', 'basic')
    ORDER BY c1.company;

但是没有结果。有人可以看到我做错了什么吗?抱歉,我对 mysql 还不是很熟悉。感谢您的帮助。

最佳答案

您可以使用 EXISTSNOT EXISTS 的组合来获得所需的结果:

SELECT DISTINCT c1.company 
FROM company c1
WHERE EXISTS (SELECT 1 
              FROM company AS c2 
              WHERE c1.company = c2.company AND c2.account_level IN ('full', 'basic'))

      AND

      NOT EXISTS (SELECT 1 
                  FROM company AS c3
                  WHERE c1.company = c3.company AND c3.account_level IN ('enterprise')

或者,更简单:

SELECT DISTINCT c1.company 
FROM company c1
WHERE c1.account_level IN ('full', 'basic'))

      AND

      NOT EXISTS (SELECT 1 
                  FROM company AS c2
                  WHERE c1.company = c2.company AND c2.account_level IN ('enterprise')

关于MySQL查询以列出不是特定类型的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057908/

相关文章:

php - 查询100k记录表,执行时间超时

sql-server - 使用 Case When Exists 子句进行更新

mysql - 如何优化这个数据库操作?

MySQL:查找没有提交的用户

php - cakephp 加入查询不起作用

php - 从数据库中检索某些值时出现问题

mysql - 数据库设计——Follow System of billions of records

c# - Linq 查询等效于存在多个条件

php - 从另一个表中不存在的表中选择mysql php

sql - SQL的EXISTS和NOT EXISTS的目的