[英]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.