[英]Insert values in a table based on values from a view and another table
我有 2 个表和一个具有这种结构的视图(所有列都是字符串):
first_table -> 1 column
second_table -> 3 columns
view -> 1 column
在所有这些中,我都有一个名为 system 的列。第一个表没有像视图那样的最新系统。 所以我想做的是将视图中尚未插入表中的所有系统插入到 first_table 中,并忽略第二个表中的系统。
例子:
Fist Table : View: Second table:
System 1 System 1 System 2
System 2 System 3
System 3
System 4
System 5
我希望 first_table 看起来像这样:
System 1
System 4
System 5
直到现在我尝试过这样的事情:
INSERT ignore INTO first_table
SELECT SYSTEM
FROM view
where System !="" GROUP BY System
和另一个:
INSERT ignore INTO first_table
SELECT System
FROM view
WHERE System !="" GROUP BY System and NOT EXISTS (SELECT System
FROM view)
您使用NOT EXISTS
走在正确的轨道上。 但是你必须关联子查询(对于哪个系统,没有行必须存在?)并使用其中两个,每个表一个。
INSERT INTO `first table`
(system)
SELECT v.system
FROM `view` v
WHERE NOT EXISTS (SELECT *
FROM `first table` t1
WHERE t1.system = v.system)
AND NOT EXISTS (SELECT *
FROM `second table` t2
WHERE t2.system = v.system);
你可以在这个SQL 小提琴上试试
SELECT TFinal.S
FROM (
SELECT S FROM T3 WHERE S NOT IN (SELECT S FROM T2)
) AS TFinal
WHERE TFinal.S NOT IN (SELECT S FROM T1);
尝试类似下面的内容。 这个想法是在 T2 和 T1 上做联合,在 T3 上做减号。 请注意,这仅供参考。 根据需要重写:
INSERT INTO T1 select S from T3 where T3.S NOT IN (SELECT S from T2 UNION select S from T1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.