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