有条件加入 table

join table on condition

我有 3 个表 userstudent_datateacher_data。用户可以是学生或教师。如果是老师我想加入userteacher_data。如果是学生,那么我想加入 userstudent_data

我怎样才能加入这个条件。

也许可以尝试联合 - 像这样

select user_id, user_other_stuff
from user, student_data
where user.user_id = student_data.user_id
UNION
select user_id, user_other_stuff
from user, teacher_data
where user.user_id = teacher_data.user_id

你可以这样写:

select   u.user_id,
         s.student_id,
         t.teacher_id
from usr u
left join student_data s  on u.user_id=s.student_id
left join teacher_data t  on u.user_id=t.teacher_id
where s.student_id is not null or t.teacher_id is not null
order by u.user_id

对于每个 user_id 检查他是学生还是老师,如果他是学生,则获取他的学生列值,否则为空,如果他是教师,则获取他的教师列值,否则为空。

我会将两个数据 table 合并到一个 sub-query 中,然后将用户加入其中。

SELECT
  *
FROM
  usr   u
LEFT JOIN
(
  SELECT user_id, datum, xxx, NULL AS yyy FROM student_data
  UNION ALL
  SELECT user_id, datum, NULL,        yyy FROM teacher_data
)
  d
    ON d.user_id = u.id

https://dbfiddle.uk/?rdbms=oracle_21&fiddle=9b801ea739d42fe50c00ef4e17eaf143

备注:

  • 从两个数据table中选择的列必须匹配
  • 必须跳过任何不匹配的列或用 NULL 填充
  • 请不要调用 table user,它是保留关键字,Oracle 不允许。