繁体   English   中英

有没有办法在 SQL 的左连接后获取变量并将它们添加为列?

[英]Is there a way to take variables and add them as columns after a left join in SQL?

我有 2 个表:表 A:

| ID |  class1     |  class2 | class3 |  class4 |
+----+-------------+---------+--------+---------+
|  1 |  ABC123     |  23     | C123   | BC123   | 
|  2 |  DEF465     |  65     | F465   | EF465   | 
|  3 |  GHI789     |  89     | I789   | HI789   |
|  4 |  JKL132     |  32     | L132   | KL132   |
|  5 |  MNO456     |  56     | O456   | NO456   |

和表 B:

| ID |  class_desc |     text   | 
+----+-------------+------------+
|  1 |  ABC123     |  "foo"     |  
|  2 |  23         |  "foo b"   |
|  3 |  C123       |  "foo bar" | 
|  4 |  BC123      |  "foo-bar" | 
|  5 |  DEF465     |  "bar"     | 
|  6 |  65         |  "bar f"   | 
|  7 |  F465       |  "bar foo" | 
|  7 |  EF465      |  "bar-foo" | 
etc...

我想做一个左连接,我得到一个像表 C 这样的表:

| ID |  class1  |  class2 | class3 |  class4 | class_1_desc | class_2_desc | class_3_desc| class_4_desc|
+----+----------+---------+--------+---------+--------------+--------------+-------------+-------------+
|  1 |  ABC123  |  23     | C123   | BC123   | "foo"        |"foo b"       |"foo bar"    |"foo-bar"    |
|  2 |  DEF465  |  65     | F465   | EF465   | "bar"        |"bar f"       |"bar foo"    |  "bar-foo"  |
|  3 |  GHI789  |  89     | I789   | HI789   | etc...
|  4 |  JKL132  |  32     | L132   | KL132   |
|  5 |  MNO456  |  56     | O456   | NO456   |

提前致谢

您可以加入 4 次:

select 
    ta.*,
    tb1.text class_1_desc,
    tb2.text class_2_desc,
    tb3.text class_3_desc,
    tb4.text class_4_desc
from tableA ta
inner join tableB tb1 on tb1.class_desc = ta.class1
inner join tableB tb2 on tb2.class_desc = ta.class2
inner join tableB tb3 on tb3.class_desc = ta.class3
inner join tableB tb4 on tb4.class_desc = ta.class4

如果tableB中声明的class之一可能在tableA中不存在,那么您需要left join而不是inner join

如果你真的想用查询结果创建一个新表,比如tableC ,那么你可以使用create table... as select语法:

create table tableC as
select 
    ta.*,
    tb1.text class_1_desc,
    tb2.text class_2_desc,
    tb3.text class_3_desc,
    tb4.text class_4_desc
from tableA ta
inner join tableB tb1 on tb1.class_desc = ta.class1
inner join tableB tb2 on tb2.class_desc = ta.class2
inner join tableB tb3 on tb3.class_desc = ta.class3
inner join tableB tb4 on tb4.class_desc = ta.class4

DB Fiddle 上的演示(使用left join ,因为您的示例数据不完整):

ID | class1 | class2 | class3 | class4 | class_1_desc | class_2_desc | class_3_desc | class_4_desc
-: | :----- | -----: | :----- | :----- | :----------- | :----------- | :----------- | :-----------
 1 | ABC123 |     23 | C123   | BC123  | foo          | foo b        | foo bar      | foo-bar     
 2 | DEF465 |     65 | F465   | EF465  | bar          | bar f        | bar foo      | null        
 3 | GHI789 |     89 | I789   | HI789  | null         | null         | null         | null        
 4 | JKL132 |     32 | L132   | KL132  | null         | null         | null         | null        
 5 | MNO456 |     56 | O456   | NO456  | null         | null         | null         | null        

您似乎想要多个left join

select a.*,
       b1.text as text_1,
       b2.text as text_2,
       b3.text as text_3,
       b4.text as text_4
from a left join
     b b1
     on b1.class_desc = a.class1 left join
     b b2
     on b2.class_desc = a.class2 left join
     b b3
     on b3.class_desc = a.class3 left join
     b b4
     on b4.class_desc = a.class4;

暂无
暂无

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

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