【发布时间】:2017-03-28 13:49:24
【问题描述】:
我有一个场景,我想在一个连接上设置一个条件,即如果 A = B 然后加入 1 个集合,否则加入另一个集合。两种情况下的表格都是相同的,只是条件不同。我尝试过使用大小写,但出现语法错误。
SELECT *
FROM [Table1] CUP
LEFT OUTER JOIN Table2 CP ON CUP.StateCode = CP.StateCode
AND (CUP.ClientId = CP.ClientId OR CP.ClientId = 0)
我尝试过的
SELECT *
FROM [Table1] CUP
LEFT OUTER JOIN Table2 CP
ON CASE
WHEN CUP.ClientId = CP.ClientId
THEN CUP.StateCode = CP.StateCode AND CUP.ClientId = CP.ClientId
ELSE CUP.StateCode = CP.StateCode AND (CUP.ClientId <> CP.ClientId or CP.ClientId = 0)
@juan
ON
CUP.StateCode = CP.StateCode AND ((CUP.ClientId = CP.ClientId or CP.ClientId <> 0) OR (CUP.ClientId <> CP.ClientId or CP.ClientId = 0))
【问题讨论】:
-
实际上在第 1 部分中,我的匹配 clientid 和 0 的代码数据即将到来。我只想要其中一个
-
... ON (A=B AND 1) OR (A B AND another) ... 基于您的模棱两可的描述。这应该工作
-
在 ON 和 WHERE 子句中使用 AND/OR 而不是大小写通常要好得多。
-
您发布的第一个查询有什么问题?这应该是这样写的,并且在语法上是正确的,即使你说你遇到了语法错误。
-
那是因为你的case expressxion无效。正如我之前所说,它不能用于这样的多个谓词。
标签: sql sql-server join left-join