【发布时间】:2011-11-08 06:38:08
【问题描述】:
我希望能够根据表达式的结果对两个表进行内部连接。
到目前为止我一直在尝试什么:
INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
ON
RReg.RegistreringsId = R.Id
RegT 是我在此加入之前所做的加入:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
此 SQL 脚本不起作用。
总而言之,如果Type 为1,那么它应该加入TimeRegistration 表,否则它应该加入DrivingRegistration。
解决方案:
在我的选择语句中,我执行了以下连接:
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 1
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type <>1
然后我编辑了我的where-clause 以输出正确,具体取决于RegType,如下所示:
WHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id)
【问题讨论】:
-
你不能那样做!
CASE不能用于动态交换查询的随机部分。这些表的结构是否相同? -
您是否收到错误消息?如果有,是什么?
标签: sql sql-server tsql join inner-join