在 SQL Server JOIN 中利用 CASE 语句
在 SQL Server JOIN 条件中使用 CASE 语句可能很棘手。 在 JOIN 子句中直接使用 CASE 语句通常会导致语法错误,例如“'='附近的语法不正确。”
理解语法错误
出现此错误是因为 CASE 语句生成标量值,而不是布尔 true/false 结果。 然而,JOIN 条件需要布尔表达式来决定是否连接行。 一个简单的没有比较的 CASE 语句不能满足这个需求。
正确的做法
解决方案涉及设计 CASE 语句来输出布尔值(或可以轻松与布尔值进行比较的值)。 然后将此输出用于比较以控制连接。
这是一个改进的 JOIN 条件示例:
<code class="language-sql">ON CASE WHEN a.type IN (1, 3) THEN CASE WHEN a.container_id = p.hobt_id THEN 1 ELSE 0 END WHEN a.type IN (2) THEN CASE WHEN a.container_id = p.partition_id THEN 1 ELSE 0 END ELSE 0 END = 1</code>
此修改后的语句使用嵌套的 CASE 语句。 如果满足连接条件(例如 a.container_id = p.hobt_id
),内部 CASE 语句返回 1,否则返回 0。然后外部 CASE 语句组合这些结果。 最终比较 (= 1
) 确保仅当嵌套 CASE 语句中的条件为 true 时才连接行。
此方法允许在 JOIN 条件中使用 CASE 语句,根据特定条件有效地对行进行条件连接。
以上是如何在SQL Server JOIN条件中有效使用CASE语句?的详细内容。更多信息请关注PHP中文网其他相关文章!