mysql - MySQl 查询中的基本布尔逻辑
问题描述
有关详细信息,请参阅此小提琴。
基本上,我正在为 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)
但是,当我尝试结合,找到一个在泰雷兹和谷歌工作过的候选人时,我希望得到候选人 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)
最后一个查询有什么问题?
解决方案
您正在搜索jobs
表格,因此您正在寻找泰雷兹和谷歌的工作,然后为这些工作选择所有不同的候选人。
由于工作(在您的数据模型中)仅在一家公司,因此没有工作可以匹配,因此不会返回任何候选人。
下面的查询将给出你想要的:
select * from candidates c
where 1=1
and ( exists (
select * from jobs j
where j.candidate_id = c.candidate_id
and (exists (select * from companies com where com.company_id = j.company_id and upper(com.company_name) like 'THALES'))
))
and ( exists (
select * from jobs j
where j.candidate_id = c.candidate_id
and (exists (select * from companies com where com.company_id = j.company_id and upper(com.company_name) like 'GOOGLE'))
));
推荐阅读
- docker - Kubernetes 访问硬件(设备插件?)
- wordpress - 在特定页面上禁用 Elementor
- objective-c - AFNetworking 将 json 响应读取为 text/html
- python - 如何根据内部值的总和对嵌套字典进行排序
- c - 如何找到给定目标数量所需的最小硬币数量(与现有数量不同)
- c++ - 存储在静态 std::list 中的指针的 Valgrind 错误内存泄漏
- requirejs - 将 videojs 7 添加到 magento 2.4
- html - 请更正此 QueryStringParameter
- javascript - 在 react 如何使用可重用组件作为 React Component 传递到 react-router-dom 组件道具?
- azure - 错误 ASPCONFIG:无法加载文件或程序集'CrystalDecisions.CrystalReports.Engine,版本 = 13.0.2000.0 Azure DevOps CI Pipline