回答

收藏

有条件的内部加入

技术问答 技术问答 221 人阅读 | 0 人回复 | 2023-09-14

我希望能够基于表达式的结果内部联接两个表。
$ A6 n. J' c5 Q到目前为止,我一直在尝试:: H/ t6 A1 s& M- K% o- w7 ]( `
INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
; s5 }  Z: t! f6 AON
( E# _7 D, ?) K3 J, [; r) ^* G: t2 CRReg.RegistreringsId = R.Id4 K! B3 R  G2 @
RegT是我在此联接之前进行的联接:+ m, q; U$ _9 }' Z2 G
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
# u( x6 Q5 c; R" G) Y4 X该SQL脚本不起作用。/ \8 {% f2 n; H3 L* t/ i; ?
因此,总的来说,如果aType为1,则它应在表上TimeRegistration联接,否则应在上联接DrivingRegistration。
* g' h. v( i, x) o' n2 Y, r* W. s' r解决方案:
9 S  I* S0 R( h8 i4 \4 h在我的选择语句中,我执行了以下联接:4 U  k, u3 n/ }, b
INNER JOIN  RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
. S( o- u5 N# m) ALEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 17 L' s" V9 P! L
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type 1. w" a5 X3 ~6 e
然后where-clause,根据进行编辑,以输出正确的内容RegType,如下所示:
) J$ i# |6 d3 ~WHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id), t* l3 ]# A: R# @/ `- |2 m
               
) V6 {& c- n" N: m  v9 K- Q解决方案:
1 }( W4 @4 g' S               
6 ~& j) T6 P  h7 Q: m
& w& L4 p% S  o6 }. ?
& F; k, Z4 T5 G/ v                尝试使用LEFT JOIN的将两个表放入查询中
8 J, ^2 v0 X% S; _9 ?7 S$ ]$ @LEFT JOIN TimeRegistration TR ON r.rid = TR.Id AND RegT.type =1 7 A) u+ ?& }! o8 }1 I) w
LEFT JOIN DrivingRegistration DR ON r.rid = DR.Id AND RegT.type 1
$ z: N! n3 [) R, M! H6 F/ g. G' R现在,在您的select子句中,使用7 v4 l& h8 D8 h
CASE RegType.Type WHEN 1 THEN TR.SomeField ELSE DR.someField END as SomeField
" y1 a. L0 {) s0 [. M# x, H2 }另一种选择是使用动态SQL
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则