MySQL 查询列出不属于特定类型的项目
MySQL query to list items that are not of a certain type
我想在我们的数据库中获取 account_level IN ('basic', 'full')
的公司列表。我们的客户是 account_level = 'enterprise'。在许多情况下,企业客户在数据库中也会有行,那时它们是基本的或完整的,所以我想排除任何 basic/full 也有企业行的公司(即我想排除我们当前的客户)。这样,我就可以得到一份严格基本或完整的公司列表,实际上还不是我们的客户。
这里有一个公司的例子 table:
1 company a basic
2 company a full
3 company b basic
4 company b enterprise
5 company c basic
我要查询return家公司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 方面还不是很有经验。感谢您的帮助。
您可以使用 EXISTS
和 NOT 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')
我想在我们的数据库中获取 account_level IN ('basic', 'full')
的公司列表。我们的客户是 account_level = 'enterprise'。在许多情况下,企业客户在数据库中也会有行,那时它们是基本的或完整的,所以我想排除任何 basic/full 也有企业行的公司(即我想排除我们当前的客户)。这样,我就可以得到一份严格基本或完整的公司列表,实际上还不是我们的客户。
这里有一个公司的例子 table:
1 company a basic
2 company a full
3 company b basic
4 company b enterprise
5 company c basic
我要查询return家公司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 方面还不是很有经验。感谢您的帮助。
您可以使用 EXISTS
和 NOT 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')