簡體   English   中英

PostgreSQL將表聯接到幾列

[英]Postgresql join tables to several columns

我有一個名為表名稱的學生姓名列表,我想從另一個名為類別的表中找到他們的類別,如下所示:

Class_A    Class_B    Class_C  Class_D  Category
Sam                   Adam              High
            Sarah                       Medium
James                                   High
Emma        Simon               Nick    Low

我的解決方案是進行左聯接,但第一個表中的學生姓名應與四列之一匹配,因此我不確定如何編寫查詢。 目前,我的查詢僅與Class_A匹配,而我需要檢查所有類別,如果學生的姓名存在,則返回類別。 (注意:有些行有多個學生的名字)

SELECT Names.name, Categories.Category 
FROM Names
   LEFT JOIN Categories ON Names.name = Categories.Class_A; 

表名看起來像這樣:

Name
----
Emma
Nick
James
Adam
Jack
Sarah

我期望輸出如下:

Name     Category
----     ----
Emma     Low
Nick     Low
James    High
Adam     High
Jack     -
Sarah    Medium

嘗試使用on子句中的OR:

SELECT Names.name, coalesce(Categories.Category,'-') as category 
FROM Names
   LEFT JOIN Categories ON Names.name = Categories.Class_A or Names.name = Categories.Class_B or Names.name = Categories.Class_C or Names.name = Categories.Class_D

我傾向於取消第一張桌子。 看起來像:

select n.name, c.category
from name n left join
     (categories c cross join lateral
      (values (c.class_a), (c.class_b), (c.class_c), (c.class_d)
      ) v(name)
     )
     on n.name = v.name
where v.name is not null;

雖然你也可以解決這個使用in (或or )在on條款,即可能產生的效率低得多的執行計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM