回答

收藏

有条件的内部加入

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

我希望能够基于表达式的结果内部联接两个表。
& t) q; b+ R: [+ a6 o到目前为止,我一直在尝试:
' a- Y* y8 m+ O% Q# ?) H! WINNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
- W  ~3 H- b- I  R' O; SON
* Y+ X2 x& _! U9 U4 a. B. aRReg.RegistreringsId = R.Id# ]  S$ Y" t) J
RegT是我在此联接之前进行的联接:/ C& s/ s3 ^$ Q) C: k$ O
INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id$ N- w! B# m) q
该SQL脚本不起作用。( Z, u! C& |! t' x
因此,总的来说,如果aType为1,则它应在表上TimeRegistration联接,否则应在上联接DrivingRegistration。
" Z: E) G7 q  B! V; _解决方案:& k: ?) B5 _5 O
在我的选择语句中,我执行了以下联接:
+ s+ `2 _" E, _8 WINNER JOIN  RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
$ i  S7 }' y3 P/ _LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 12 D" k  T2 I* m- }( ?! @$ F
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type 14 P! _- s# Y% c$ b# r& S# m
然后where-clause,根据进行编辑,以输出正确的内容RegType,如下所示:
4 ?/ `! e1 y7 ]( YWHERE (CASE RegT.Type WHEN 1 THEN TReg.RegistreringsId ELSE DReg.RegistreringsId END = R.Id)- B" R7 t) i! }# x2 o
               
2 r# T; Y( H0 w& Q解决方案:
% ]6 f! C9 v" m1 u; k/ x                2 A: e$ {' [3 a! Z- Y, Q7 V
; o2 o$ Z8 c* N/ c
  C( ~1 A! M0 a9 b/ i8 e
                尝试使用LEFT JOIN的将两个表放入查询中
% W. {, L4 @! F+ q3 Q8 o6 t$ QLEFT JOIN TimeRegistration TR ON r.rid = TR.Id AND RegT.type =1
: k$ h2 K- w% i6 LLEFT JOIN DrivingRegistration DR ON r.rid = DR.Id AND RegT.type 17 F& X& w5 O" S4 y% |
现在,在您的select子句中,使用
7 E# c% \( B* ]+ V* GCASE RegType.Type WHEN 1 THEN TR.SomeField ELSE DR.someField END as SomeField4 R2 \. t" _: y: c& d
另一种选择是使用动态SQL
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则