SQL如果在一个表中不存在,则从另一表中选择/插入行

时间:2018-08-03 19:44:41

标签: mysql sql select insert exists

我有一个表可能缺少ID,因此我需要查看另一张表。在缺少ID的地方,我需要根据当前表插入一行,但将qty字段设置为0。不确定是否可以...

表A:

ID--F1--QTY
1 --xx--5
2 --xx--6
3 --xx--7

表B:

ID
4

新表格:

ID--F1--QTY
1 --xx--5
2 --xx--6
3 --xx--7
4 --xx--0

2 个答案:

答案 0 :(得分:2)

您可以使用联接或NOT IN来做到这一点,

使用加入

将tableB加入tableA并选择所有不存在的ID,然后将其插入tableA

INSERT INTO TableA(ID, QTY)
SELECT X.ID, 0 QTY FROM TableB X
LEFT OUTER JOIN TableA Y ON X.ID = Y.ID
WHERE Y.ID IS NULL

OR

如果要使用两个表中的数据创建新表,请使用以下SQL

INSERT INTO NewTable(ID, QTY)
SELECT X.ID, 0 QTY FROM TableB X
LEFT OUTER JOIN TableA Y ON X.ID = Y.ID
WHERE Y.ID IS NULL
UNION ALL
SELECT ID, QTY FROM TableA

使用禁止进入

INSERT INTO TableA(ID, QTY)
SELECT X.ID, 0 QTY FROM TableB X
WHERE X.ID NOT IN (SELECT ID FROM TableA WHERE ID IS NOT NULL)

答案 1 :(得分:1)

另一个选项是相关子查询和NOT EXITS

INSERT INTO `Table A`
            (`ID`,
             `QTY`)
            SELECT `ID`,
                   0
                   FROM `Table B`
                   WHERE NOT EXISTS (SELECT *
                                            FROM `Table A`
                                            WHERE `Table A`.`ID` = `Table B`.`ID`);
相关问题