sql - 如果第一个查询没有找到任何内容,则进行条件查询?
问题描述
我需要从一个表中获取一个字段,如果它不存在,请尝试从另一个表中获取
它
select printer_id from all_printers where printer_name ='printer1'
如果它在那里 - 退回它,如果它不在那里
select printer_id from new_printers where printer_name ='printer1'
因为我正在编写一个 Web 应用程序,所以我想最小化代码和 DB 命中,我想知道是否有一种方法可以在单个查询中执行此操作,而无需同时点击两个查询。
left join 会起作用,但表很大(数百万条记录),如果不需要,我不希望它同时击中它们。
解决方案
您可以使用not exists
:
with ap as (
select printer_id from all_printers where printer_name = 'printer1'
)
select printer_id
from ap
union all
select printer_id
from new_printers np
where not exists (select 1 from ap)
推荐阅读
- html - 如何使我的背景图像适合手机尺寸?
- azure-devops - 在 Azure Devops 中构建一个通用工件,并在发布时根据不同的环境注入某些变量
- aem - AEM - 如何在 OSGi 组件中检索 model-json
- regex - 在 htaccess 中删除 php 扩展会返回内部服务器错误 (500)
- javascript - 下载图像时在 html2canvas 中忽略不透明度值
- azure - 为什么我使用 Azure 服务管理 API 得到 403?
- arrays - 在 Bash 脚本中尝试将局部变量传递给 SSH,然后执行其他命令
- resharper - Resharper 显示潜在的修复 (ctrl + .) 不适用于 stylecop
- javascript - Regex - JavaScript,匹配函数第二个参数的正则表达式
- r - 警告消息:'c:/Rtools/mingw_/bin/g++' 未找到