我必须编写一个查找丢失数据的查询,但我希望它在没有任何子查询或嵌套 SELECT 的情况下编写(它找到丢失的数据并将其从表中插入到缺少数据的表中)。
查询是:
INSERT INTO Personal_tbl
SELECT *
FROM PersonalView
WHERE PID NOT IN (SELECT PID FROM Personal_tbl)
我必须编写一个查找丢失数据的查询,但我希望它在没有任何子查询或嵌套 SELECT 的情况下编写(它找到丢失的数据并将其从表中插入到缺少数据的表中)。
查询是:
INSERT INTO Personal_tbl
SELECT *
FROM PersonalView
WHERE PID NOT IN (SELECT PID FROM Personal_tbl)
您通常会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
INSERT INTO Personal_tbl
SELECT Pv.*
FROM PersonalView Pv
INNER JOIN Personal_tbl pt ON pt.PID <> Pv.PID