CASE语句能否用于JOIN条件?
尝试根据sys.allocation_units
表中某列的值连接表时,以下代码会产生语法错误:
<code class="language-sql">SELECT * FROM sys.indexes i JOIN sys.partitions p ON i.index_id = p.index_id JOIN sys.allocation_units a ON CASE WHEN a.type IN (1, 3) THEN a.container_id = p.hobt_id WHEN a.type IN (2) THEN a.container_id = p.partition_id END </code>
错误原因解释:
CASE表达式返回单个值,而不是一个等式表达式。在本例中,需要将CASE表达式的结果与常量(例如1)进行比较,以确定条件是否为真。
修正后的代码:
<code class="language-sql">SELECT * FROM sys.indexes i JOIN sys.partitions p ON i.index_id = p.index_id JOIN sys.allocation_units a ON CASE WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1 WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1 ELSE 0 END = 1</code>
此代码将CASE表达式的结果与1进行比较,返回条件为真的行。
以上是可以在 JOIN 条件中使用 CASE 语句吗?的详细内容。更多信息请关注PHP中文网其他相关文章!