繁体   English   中英

SQL 左连接到由内部 SELECT 的结果确定的表

[英]SQL LEFT JOIN to table determied by result from inner SELECT

我只是想知道这是否可能。 我正在尝试显示一张表中的所有结果并从各个组(表)中获取更多详细信息

+--------------------------+     +--------------------------+
| table group_a            |     | table group_b            |
+--------------------------+     +--------------------------+
| id      name        age  |     | id      name        age  |
| s01     John        10   |     | s11     Clark       11   |
| s02     Jane        11   |     | s12     Cherry      09   |
+--------------------------+     +--------------------------+

+----------------------------+
| table result_1             |
+----------------------------+
| id      result     group   |
| s01     9          a       |
| s12     10         b       |
| s11     9          b       |
| s02     7          a       |
+----------------------------+

我希望得到这个 output

  id      name     age     result
+------------------------------------+
  s12     Cherry   09      10
  s01     John     10      9
  s11     Clark    11      9
  s02     Jane     11      7

我有点坚持如何将我的查询指向不同的表。 无论如何,我只是想知道这是否可能,或者我应该使用 go 来采用不同的方法。

B'rgrds,

您可以使用两次left join

select r.id, coalesce(a.name, b.name) as name, coalesce(a.age, b.age) as age,
       r.result
from result_1 r left join
     group_a a
     on r.group = 'a' and r.id = a.id left join
     group_b b
     on r.group = 'b' and r.id = b.id;

我希望上述内容具有更好的性能,但您也可以在加入之前使用union all

select r.id, ab.name, ab.age, r.result
from result_1 r left join
     ((select id, name, age, 'a' as group
       from group_a a
      ) union all
      (select id, name, age, 'b' as group
       from group_b b
      )
     ) ab
     on r.group = ab.group and r.id = as.id ;

注意:最好将所有组放在一个表中,而不是将它们拆分到多个表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM