[英]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.