jre*_*121 3 sql-server null notin
对不起伙计们,我不知道怎么说这个,但我在where子句中有以下内容:
person_id not in (
SELECT distinct person_id
FROM protocol_application_log_devl pal
WHERE pal.set_id = @set_id
)
Run Code Online (Sandbox Code Playgroud)
当子查询没有返回结果时,我的整个select都无法返回任何内容.为了解决这个问题,我person_id在子查询中替换了isnull(person_id, '00000000-0000-0000-0000-000000000000').
它似乎有效,但是有更好的方法来解决这个问题吗?
NOT EXISTS无论如何最好使用:
WHERE NOT EXISTS(
SELECT 1 FROM protocol_application_log_devl pal
WHERE pal.person_id = person_id
AND pal.set_id = @set_id
)
Run Code Online (Sandbox Code Playgroud)
我应该使用NOT IN,OUTER APPLY,LEFT OUTER JOIN,EXCEPT还是NOT EXISTS?
我看到的一种模式,并希望我没有,不是.当我看到这种模式时,我感到畏缩.但不是出于性能原因 - 毕竟,它在这种情况下创建了一个足够好的计划:
主要问题是如果目标列是NULLable,结果可能会令人惊讶(SQL Server将其处理为左反半连接,但无法可靠地告诉您右侧的NULL是否等于 - 或不等于 - 左侧的参考).此外,如果列可以为NULL,则优化可能会有不同的行为,即使它实际上不包含任何NULL值
而不是NOT IN,对此查询模式使用相关的NOT EXISTS. 永远.当所有其他变量相同时,其他方法可以在性能方面与其竞争,但所有其他方法都会引入性能问题或其他挑战.
| 归档时间: |
|
| 查看次数: |
4303 次 |
| 最近记录: |