簡體   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