Вы можете присоединиться 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
Если существует вероятность того, что один из class
объявленных в tableA
не существует в tableB
, то вы хотите left join
s вместо inner join
s.
Если вы действительно хотите создать новую таблицу, скажем 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 | <em>null</em>
3 | GHI789 | 89 | I789 | HI789 | <em>null</em> | <em>null</em> | <em>null</em> | <em>null</em>
4 | JKL132 | 32 | L132 | KL132 | <em>null</em> | <em>null</em> | <em>null</em> | <em>null</em>
5 | MNO456 | 56 | O456 | NO456 | <em>null</em> | <em>null</em> | <em>null</em> | <em>null</em>