繁体   English   中英

根据视图和另一个表中的值在表中插入值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM