当前位置: 首页 > 面试题库 >

有条件的加入不同的表

胡玉书
2023-03-14
问题内容

我想知道用户是否在2个相关表中的 任何 一个条目。

桌子

USER (user_id)
EMPLOYEE (id, user_id)
STUDENT (id, user_id)

用户可以有一个雇员和/或学生的条目。如何在一个查询中获取该信息?我试过了:

select * from [user] u
inner join employee e 
    on e.user_id = case when e.user_id is not NULL 
                        then u.user_id 
                        else null 
                   end
inner join student s 
    on s.user_id = case when s.user_id is not NULL 
                        then u.user_id 
                        else null 
                   end

但是它将仅返回在 两个 表中 都有 条目的用户。

SQL Fiddle示例


问题答案:

您可以使用外部联接:

select *
  from USER u
  left outer join EMPLOYEE e ON u.user_id = e.user_id
  left outer join STUDENT s ON u.user_id = s.user_id
 where s.user_id is not null or e.user_id is not null

或者(如果您对EMPLOYEE或STUDENT表中的数据不感兴趣)

select *
  from USER u
 where exists (select 1 from EMPLOYEE e where e.user_id = u.user_id)
    or exists (select 1 from STUDENT s  where s.user_id = u.user_id)


 类似资料:
  • 我有点卡住了。这个问题很接近我需要的,但不完全是: [Products_Final]是订单id上带有订单表的联接表 订单表是 诸如此类 所以如果我这样做了 我想要的是基于不同水果和国家组合的的总数,因为Product_id2看起来可能是重复的顺序。 如果我做了区分,总和似乎不起作用。 我如何把这两件事结合在一起?下面的我也试过了但是接不上

  • 问题内容: 我希望能够基于表达式的结果内部联接两个表。 到目前为止,我一直在尝试: RegT是我在此联接之前进行的联接: 该SQL脚本不起作用。 因此,总的来说,如果a为1,则它应在表上联接,否则应在上联接。 解决方案: 在我的选择语句中,我执行了以下联接: 然后,根据进行编辑,以输出正确的内容,如下所示: 问题答案: 尝试使用LEFT JOIN的将两个表放入查询中 现在,在您的select子句中

  • 问题内容: 我正在尝试编写带有条件的嵌套联接查询。 我现在有的查询是: 输出以下SQL: 还有以下错误: 它告诉我没有列store.retailer_id,但是,我可以运行以下查询,它将正常工作: 问题答案: 看起来您不需要在这里嵌套嵌套。尝试使用类似 嵌套连接也可以使用

  • 问题内容: 我的数据库中有三个表,一个学生,一个班级和一个作业。POJO如下: 基本上,一个学生有一个当前班级,以及一份作业清单(他被分配到的所有班级)。 我的问题是,在hibernate状态下,我想知道所有没有班级() 或 分配给属于“ 1”学年班级但已设置为 我设法制定了两个单独的标准来获得我想要的东西: 和 但是我不知道如何用or来“统一”这两个条件。 问题答案: 如果要创建包含许多对象的

  • 问题内容: 我花了几个小时进行搜索,没有发现与我的案子相似的内容。 让我们假设以下多对多数据模型: 现在,假设我要映射与合同方(单向)有关的 所有 合同。可以使用实体类中的以下注释来完成: 那样就好。 但是我要寻找的是如何映射具有 特定角色的 合同? 从技术上讲,我正在寻找一种在JOIN语句中添加 额外条件 的方法。 到目前为止,在类似的主题中发现了以下想法: 将联接表映射为单独的实体,并使用自定

  • 我有3个表格:学生,课程(重要领域点),学生课程(重要领域成绩)。 如果成绩大于或等于70,则考试通过,因此学生将获得分数。如果成绩低于70,学生将不会获得分数。如果学生的学分之和大于10,他就毕业了。 我需要选择学生姓名,他的通过分数的总和,他所有成绩的平均值。我可以选择学生姓名,他的通过分数和他通过成绩的平均数之和。但我需要所有成绩的平均值。 我写了下面的查询。