sql - SQL 中带有条件的子查询
问题描述
我正在尝试查询连接列为 0 的输入,它应该对 where 使用不同的条件。
原始查询
Select * from dbo.Q
WHERE TX IN (SELECT TX FROM DBO.SM WHERE SITE_ID in (SELECT PSITE_ID FROM SITES WHERE SITE_NUMBER = @site_number)
如果 Psite_id 为 0 或 NULL,我希望子查询在子查询中使用 ASite_id 而不是 Psite_id。我尝试使用案例,但它给了我如下错误:
Select * from dbo.Q
WHERE TX IN (SELECT TX FROM DBO.SM WHERE SM.SITE_ID in (case when (SELECT PSITE_ID FROM SITES WHERE SITE_NUMBER = @site_number)=0 then SELECT ASITE_ID FROM SITES WHERE SITE_NUMBER = @site_number ))
我可以加入,但我仍然不太确定如何解决这个问题?
解决方案
Case的语法必须包括以下部分:
Case When <condition> Then <value> else <value> End
因此,如果我很好地了解您的需求,那么它应该可以工作:
Select *
From dbo.Q
Where TX IN (Select TX
From DBO.SM
Where SITE_ID IN
(Select Case When IsNull(PSITE_ID, 0) = 0
Then ASITE_ID Else PSITE_ID End
From SITES
Where SITE_NUMBER = @site_number))
根据您使用的 SQL 服务器类型(您未指定),IsNull() 函数可能不存在。例如,在 Oracle 中,您必须使用 NVL() 而不是 IsNull()。
推荐阅读
- azure-keyvault - 是否可以将 azure databricks 机密范围连接到其他资源组上的密钥库
- reactjs - 组件被卸载并在 DOM 中的不同位置渲染它时调用构造函数
- push-notification - iOS 应用程序在重新连接到互联网时停止接收通知
- html - VueJS 导航栏链接只有在浏览器中缩小后才能点击
- python - 使用 for in 循环时将项目移动到列表的前面
- reactjs - 如何使组件在他们接受的道具中明确?
- azure - Nginx拒绝ssh,锁在外面
- scala - 面临错误“无法加载 PDF 文档”。在scala中发送pdf文件作为字节数组作为响应(scala)
- xcode - 我可以摆脱签名部分吗?(沙盒与强化运行时)
- python - 如何从图像字段中删除/替换文件