优化 SQL 中的多个 IF-IN-SELECT 语句

Optimizing multiple IF-IN-SELECT statements in SQL

我正在尝试创建 "flag" 列以查看我的主 table 的主键是否在其他 table 中:

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

我用大约 10 个 table 多次执行此操作(即创建大约 10 个新列,每个列来自不同的 table),并且涉及所有 table大约有几百万行。到目前为止,它比我预期的要慢很多。有没有更好的方法来编写这个查询,或者有什么方法可以优化它?

Use exists 1. 好处是你不需要做一个distinct你不需要得到所有的记录,你只需要验证一个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