SQL 在三个表中的任何一个中查找匹配的记录

标签 sql sql-server-2008 join left-join

我有以下架构:

user -- user_id | first_name
full_time_job -- ft_job_id | user_id
part_time_job -- pt_job_id | user_id
internship -- internship_id | user_id

我想编写一个查询,返回存在于三个作业表中的任何一个中的所有用户。最好的方法是什么?如果可能的话,我更愿意使用 LEFT JOINS 而不是 WHERE EXISTS,但我会对最好的工作解决方案感到满意。

我不想返回三个作业表中 NONE 中存在的任何用户。

最佳答案

使用 LEFT JOIN,您只需要验证至少一个表中的 user_idNOT NULL:

SELECT
  [user].user_id
FROM
  [user]
  /* LEFT JOIN against each of the 3 tables */
  LEFT JOIN full_time_job ft ON [user].user_id = ft.user_id
  LEFT JOIN part_time_job pt ON [user].user_id = pt.user_id
  LEFT JOIN internship intern ON [user].user_id = intern.user_id
WHERE
  /* And check that *any* of them has a non-null user_id */
  ft.user_id IS NOT NULL
  OR pt.user_id IS NOT NULL
  OR intern.user_id IS NOT NULL

如果可能最好修复模式...

但从长远来看,如果可能的话,这些应该全部合并到一个单个表中,该表中有一列指示工作类型,而不是 3 个类似的表。

样本: http://sqlfiddle.com/#!2/2cd2c/1

在上面的示例中,用户 5,6 不存在于 3 个表中的任何一个中。

关于SQL 在三个表中的任何一个中查找匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925628/

相关文章:

php - 更改查询sql

sql - 获取给定向量与数据库中向量之间的最小欧氏距离

sql-server - 使用公用表表达式避免重复递归

ruby - 如何使用 ruby​​ 项目解决 postgresql 中的 AmbigouslyColumn 错误

MySQL-基于列数据的连接

mysql - SQL WHERE 语句多列 LIKE 一个值

php - 在 MySQL 中选择 n 个组的随机子集

mysql - 选择查询以将日期格式显示为 mmm dd yyyy hh :mm am in SQL server 2008

sql-server - @@OPTIONS 位掩码与 DISABLE_DEF_CNST_CHK

sql - 如何访问 Rails3 中的连接表属性?