sql - 在 SQL 中优化多个 IF-IN-SELECT 语句
问题描述
我正在尝试创建“标志”列以查看我的主表的主键是否在其他表中:
SELECT
id
,IIF(id IN (
SELECT DISTINCT id
FROM dbo.example1
), 1, 0) AS example1_flag
,IIF(id IN (
SELECT DISTINCT id
FROM dbo.example2
), 1, 0) AS example2_flag
--etc.
FROM dbo.main_table
我用大约十个表多次执行此操作(即创建大约十个新列,每个列来自不同的表),并且所有涉及的表都有大约几百万行。到目前为止,它比我预期的要慢得多。有没有更好的方法来编写这个查询,或者有什么方法可以优化它?
解决方案
使用存在 1. 关于它的好处是你不需要做一个不同的你不需要获取所有记录,你只需要验证一个 id 的存在。
SELECT
id
,
case when exists (
SELECT 1 FROM dbo.example1 b where a.id = b.id) then 1 else 0 end ) AS example1_flag
,case when exists (
SELECT 1 FROM dbo.example2 b where a.id = b.id) then 1 else 0 end ) AS example2_flag
--etc.
FROM dbo.main_table a
推荐阅读
- mysql - Mysql 服务器未启动错误 13 Ubuntu 20.04
- memory-management - 虚拟机怎么写?
- java - 在 FileNET/CMIS Web 服务中调用 getContentStream() 函数
- amazon-s3 - Magento 2.4.2-p1 使用媒体存储云 AWS S3 存储桶 - 未生成缓存图像
- flutter - Flutter中的ListTile开关如何单独改变按钮的形状和大小
- db2 - IBM 云上的免费 db2 实例在重新激活后不可用
- javascript - 带有 JSON 正文的 GET 请求
- math - 虚数和负面积
- javascript - JavaScript AND / OR 操作数
- python - 如何绘制像素蒙版并获取像素坐标