我有三张桌子看起来像这样:
表1:
身份证号码
代码
量
指标(I / A)
表2:
身份证号码
名称
地址
表3:
代码
AName
AAddress
我需要帮助编写一个SQL查询,它将拉出Name&表2中的指示符仅在表1中的指示符为“I”时,或者相反将拉出AName&仅当表1中的指标为“A”时,表3中的地址
我一直在为此疯狂!我已经尝试了各种IF和CASE语句,但没有更接近解决方案。
答案 0 :(得分:0)
这可能是你想要的吗?使用coalesce,返回第一个非null的匹配。因此,如果我们将table2与条件one.indicator =' i'否则它将为null,而是从table3中提供值。
SELECT one.*, COALESCE(i.Name, a.AName) name, COALESCE(i.Address,a.AAddress) address
FROM table1 one
LEFT OUTER JOIN table2 i ON one.id = i.id AND one.indicator = 'i'
LEFT OUTER JOIN table3 a ON one.code = a.code AND one.indicator = 'a'
我不得不假设我们想在table3的情况下加入代码。
编辑:这应该至少适用于sql server和mysql,如果您正在寻找另一种数据库类型的解决方案,这可能是一种可行的方法的建议。
答案 1 :(得分:0)
我相信这会解决问题:
Select
Case T1.Indicator
When 'I' Then T2.Name
When 'A' Then T3.AName
End as "Name"
,Case T1.Indicator
When 'I' Then T2.Address
When 'A' Then T3.AAddress
End as "Address"
From Table1 as T1
Join Table2 as T2
on T1.IDNumber = T2.IDNumber
Join Table3 as T3
on T1.Code = T3.Code