首页 > 解决方案 > 如何在检查缺失数据时不使用子查询

问题描述

我必须编写一个查找丢失数据的查询,但我希望它在没有任何子查询或嵌套 SELECT 的情况下编写(它找到丢失的数据并将其从表中插入到缺少数据的表中)。

查询是:

INSERT INTO Personal_tbl 
    SELECT * 
    FROM PersonalView 
    WHERE PID NOT IN (SELECT PID FROM Personal_tbl)

标签: jquerysqlsubquerynested-select

解决方案


您通常会not exists用于此类任务:

insert into personal_tbl (...) -- enumerate the target columns here
select *                       -- and here as well
from personalview pv
where not exists (select 1 from personal_tbl pt where pt.pid = pv.pid)

我不明白你为什么不想为此使用子查询。使用 上的索引personal_tbl(pid),这应该是一种有效的方法。但是,如果您愿意,可以使用 a 实现相同的逻辑left join

insert into personal_tbl (...)
select pv.*
from personalview pv
left join personal_tbl pt on pt.pid = pv.pid
where pt.pid is null

推荐阅读