sql - PostgreSQL - WHERE 条件指的是 2 个不同的记录,应该是 TRUE
问题描述
我有桌子:
公司员工:
id_employee
id_company
雇员:
id_employee
name
公司:
id_company
name
如果我执行诸如查询:
SELECT companies.name AS Company, employees.name AS Employee FROM employees
INNER JOIN company_employees ON company_employees.id_employee = employees.id_employee
INNER JOIN companies ON companies.id_company = company_employees.id_company
它显示:
+-----------+--------------+
| Company | Employee |
+-----------+--------------+
| Microsoft | John Smith |
| Microsoft | Mike Brown |
| IBM | Chris Miller |
+-----------+--------------+
我只想显示公司名称(company.name),其中工作员工为“John Smith”和“Mike Brown”。所以查询应该显示:
+-----------+
| name |
+-----------+
| Microsoft |
+-----------+
你知道怎么做吗?谢谢!
解决方案
我们可以尝试按公司名称聚合,然后断言:
- 每个公司集团中仅有的两个名字是“John Smith”和“Mike Brown”
- 每个公司组中不同名称的数量为两个
这两个条件都意味着结果集中的任何公司都符合您的标准。
SELECT
c.name AS Company
FROM employees e
INNER JOIN company_employees ce
ON ce.id_employee = ee.id_employee
INNER JOIN companies c
ON c.id_company = ce.id_company
WHERE
e.name IN ('John Smith', 'Mike Brown')
GROUP BY
c.name
HAVING
MIN(e.name) <> MAX(e.name);
推荐阅读
- android - 上传应用程序包时 Google Play 中的 Android 应用程序更新问题
- file - Ansible 查找匹配的模式目录,删除所有但保留最后 3 个版本
- python - 如何在 Django 中使用 uWSGI Spooler?
- amazon-web-services - 在创建用于执行 AWS 嵌入式 C 的 cmake 文件时遇到错误
- pytorch - AttributeError:模块“火炬”没有属性“推理模式”
- python - 如何直接在 Windows 资源管理器中使用 Python 脚本打开文件
- django - 如何解决 Django 中的 graphdoc markdown 错误
- android - 同意请求与 Google AdMob 之间的关联以展示个性化或非个性化广告
- google-apps-script - Google Apps 脚本 - 使用列名(不在 row1 中)而不是列号
- python - 如何在一个文件夹中打开多个泡菜文件