【发布时间】:2020-12-20 15:50:25
【问题描述】:
详情请见this fiddle。
基本上,我正在一个非常基本的测试数据库中搜索以下 3 家公司之一的工作:BAe、Thales 和 Google。
当以表格形式显示时,数据库看起来像这样(结构的完整细节在小提琴中):
Candidate name Company Job year Skills
One Thales 2015 C
One BAe 2016 Python
One Google 2017 C++
Two BAe 2015 C++
Two Google 2020 Python
Two Thales 2019 C++, UML
Three Google 2019 Python
我正在尝试各种查询以查找谁曾在哪些公司工作过(技能与此问题无关)。
这个查询:
SELECT DISTINCT candidate_id FROM jobs j
WHERE 1=1
AND ( EXISTS (
SELECT * FROM companies c
WHERE c.company_id = j.company_id
AND UPPER(c.company_name) LIKE 'THALES'));
正确给出:
+--------------+
| candidate_id |
+--------------+
| 1 |
| 3 |
+--------------+
2 rows in set (0.00 sec)
这个查询:
SELECT DISTINCT candidate_id FROM jobs j
WHERE 1=1
AND ( EXISTS (
SELECT * FROM companies c
WHERE c.company_id = j.company_id
AND UPPER(c.company_name) LIKE 'GOOGLE'));
正确给出
+--------------+
| candidate_id |
+--------------+
| 1 |
| 2 |
+--------------+
2 rows in set (0.00 sec)
但是,当我尝试合并,以找到在 Thales 和 Google 都工作过的候选人时,我希望得到候选人 1,但结果却是空的:
SELECT DISTINCT candidate_id FROM jobs j
WHERE 1=1
AND ( EXISTS (
SELECT * FROM companies c
WHERE c.company_id = j.company_id
AND UPPER(c.company_name) LIKE 'THALES')
AND EXISTS (
SELECT * FROM companies c
WHERE c.company_id = j.company_id
AND UPPER(c.company_name) LIKE 'GOOGLE')
);
Empty set (0.00 sec)
最后一个查询有什么问题?
【问题讨论】:
标签: mysql sql join subquery having-clause