使用 switch case 连接两个表以避免一对多连接
Posted
技术标签:
【中文标题】使用 switch case 连接两个表以避免一对多连接【英文标题】:Join two tables with switch case in order to avoid one to many join 【发布时间】:2021-08-04 04:29:02 【问题描述】:我有两张桌子,t1
和 t2
。
表 t1:
Name address id
---- ------- --
rob 32 cgr 12
mary 31 lmo 42
tom axel St 2
表 t2:
ID Flag expense
-- ---- --------
12 Shop 1200
12 Educ 14000
42 educ 4000
现在我必须创建一个表,其中包含 t1 中的属性以及另外两个属性,即 shop 中的费用和 edu 中的费用
表 t3
Name address id Shop_ex Educ_ex
---- ------- -- ------- -------
rob 32 cgr 12 1200 14000
mary 31 lmo 42 NULL 4000
tom axel st 2 NULL NULL
如何做到这一点?
我尝试使用 switch case 进行左连接 t2,但它给了我多个记录,因为连接变成了一对多。
select
t1.name, t1.address, t1.id,
case
when t2.flag = "shop" then t2.expense
else null
end as shop_ex
case
when t2.flag = "educ" then t2.expense
else null
end as educ_ex
from
t1
left join
t2 on (t1.id = t2.id)
看来我必须在加入之前先转换 t2 表,以便在标志的基础上拥有一条记录。但我不知道该怎么做。
请注意表格很大,优化的查询会很好。
请提出建议。
【问题讨论】:
【参考方案1】:您只需要将第一个表连接到第二个表,两次:
SELECT t1.Name, t1.address, t1.id, t2a.expense AS Shop_ex, t2b.expense AS Educ_ex
FROM table1 t1
LEFT JOIN table2 t2a
ON t2a.ID = t1.id AND t2a.Flag = 'Shop'
LEFT JOIN table2 t2b
ON t2b.ID = t1.id AND t2b.Flag = 'Educ'
Demo
【讨论】:
以上是关于使用 switch case 连接两个表以避免一对多连接的主要内容,如果未能解决你的问题,请参考以下文章