如何在具有匹配列的另一个表上插入 - WHERE NOT EXISTS?
Posted
技术标签:
【中文标题】如何在具有匹配列的另一个表上插入 - WHERE NOT EXISTS?【英文标题】:How to INSERT - WHERE NOT EXISTS on another table with a matching column? 【发布时间】:2017-08-07 20:38:59 【问题描述】:我正在寻找类似于以下内容的 SQL 语句:
INSERT INTO some_table
(a, b, c)
VALUES
('a', 'b', 'c')
RETURNING
a
WHERE NOT EXISTS
(
SELECT
some_column
FROM
another_table
WHERE
some_cond='is_true'
);
因为WHERE NOT EXISTS
后面是SELECT FROM
而不是INSERT INTO
,所以上面的内容不起作用。只有当另一个表上的 select 语句不返回任何内容时,如何才能插入到表中?
编辑2:
更改了数据库架构以包含其他表上的匹配列,而不是匹配的“待插入”列上的空约束,以使用带有选择的子查询来获得预期的功能并使用 @Isaiah3015 建议的内容。
【问题讨论】:
也看到这个问题:***.com/questions/12591392/… 【参考方案1】:最好的方法是使用您想要选择的内容创建一个 INSERT sytanx
INSERT INTO table ( column1, column2, column 3, etc)
SELECT column1, column2, column3, etc from table where condition = 'whatever
condition you want inserted into the table'
【讨论】:
两个表对我来说是不同的,它们没有匹配的列。 如果他们根本没有任何匹配的数据,你如何确定 NOT IN 或 NOT EXIST?然后你的第一个表就是 SELECT INTO。没有必要不存在。 假设SELECT INTO
可以将数据从一个表复制到另一个表中,我不需要该功能。我不确定你的意思 - 如何确定..
NOT EXIST 的目的是排除或包含特定数据(取决于您如何看待它)。例如:Table1 的 ID 为 1,2,3,4,5,6,table2 的 ID 为 1,2,3。如果你写 INSERT INTO table () Select ID FROM Table1 where ID NOT EXIST / NOT IN(Select ID from table2),将插入的值是4,5,6。因为这些是 Table2 中不存在的值。如果表 1 和表 2 之间没有相关性(如您所说),您如何确定要排除的内容?【参考方案2】:
我想你想要insert . . . select
:
INSERT INTO some_table(a, b, c)
SELECT 'a', 'b', 'c'
FROM dual
WHERE NOT EXISTS (SELECT some_column
FROM another_table
WHERE some_cond = 'is_true'
)
RETURNING a;
【讨论】:
Table 'Dual' 在我的情况下没有'a'、'b'、'c'。它们是不同的表,没有任何匹配的列。 @RobertC.Holland 。 . .'a'
、'b'
和 'c'
在您的问题中是常量字符串,在此答案中它们是常量字符串。这与dual
中的列无关。以上是关于如何在具有匹配列的另一个表上插入 - WHERE NOT EXISTS?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用具有多个 GROUP BY、子查询和 WHERE IN 在大表上的查询来优化查询?
在具有“已更改”列的表上使用 activerecord 会引发错误