I have 2 tables: table 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 |
and Table 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...
I want to do a left join where I get a Table like Table 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 |
Thanks in advance
You can join 4 times:
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
If there is a possibility that one of the class
es declared in tableA
does not exist in tableB
, then you want left join
s instead of inner join
s.
If you actually want to create a new table, say tableC
, with the results of the query, then you can use the create table... as select
syntax:
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
Demo on DB Fiddle (using left join
s, since your sample data is incomplete):
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
You seem to want multiple left join
s:
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;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.