我有一个像这样的存储过程
Select Name, Identifier, ReferenceId, ReferenceAccountId
FROM Test
在我开始内连接之前,我有一个名为Identifier
的字段。
如果这是1,那么我将使用内部联接ref_reference1
否则我将使用另一个。
INNER JOIN Ref_Reference1 ON Ref_Reference1.ReferenceId = Test.ReferenceId
INNER JOIN Ref_Reference2 ON Ref_Reference2.ReferenceId = Test.ReferenceId
我该如何解决这个问题?
答案 0 :(得分:4)
你没有。如果不使用动态SQL,则无法更改查询的“形状”,通常应尽可能避免使用。
相反,您可以执行两个左连接:
LEFT JOIN Ref_Reference1 ON
Ref_Reference1.ReferenceId = Test.ReferenceId
AND Test.Identifier = 1
LEFT JOIN Ref_Reference2 ON
Ref_Reference2.ReferenceId = Test.ReferenceId
AND Test.Identifier <> 1
您会注意到您现在也有很大的好处 - 您可以在查询的其他位置引用这些表格(您打算如何处理提案中的内容?)
答案 1 :(得分:3)
您可以尝试使用条件进行2次左连接并检查
Select
Name, Identifier, ReferenceId, ReferenceAccountId,
ISNULL(Ref_Reference1.ReferenceId,Ref_Reference2.ReferenceId)
FROM Test
LEFT OUTER JOIN Ref_Reference1 ON Ref_Reference1.ReferenceId = Test.ReferenceId AND Identifier = 1
LEFT OUTER JOIN Ref_Reference2 ON Ref_Reference2.ReferenceId = Test.ReferenceId AND Identifier <> 1
答案 2 :(得分:2)
语言中没有任何内容允许它,因为我认为你想要的。但是,如果两个结果的结构相同,则可以存储中间结果;
if ...
select ...
into #result
from ... join reference1
else
select ...
into #result
from ... join reference2
但这不好......