【问题标题】:Including multiple columns in NOT IN在 NOT IN 中包含多个列
【发布时间】:2021-11-24 12:31:22
【问题描述】:

我有两张如下表。

表 1

Book price
A   100
B   200
C   400
D   300

表 2

Book price
A   100
B   200
C   400

现在我正在执行下面的命令,因为我只想将第 4 条记录插入到表 2 中。我想在 NOT IN 之前添加两个列名。我该怎么办?

Insert into table2 select * from table1 t1 where t1.book not in (select book from table2);

【问题讨论】:

  • 你有没有尝试过代替 "not in" ,其中 t1.book t2.book?
  • 因此,当您将其作为 select 运行而不使用 insert 时,您会看到您期望的行吗?
  • 我试过你的代码,它对我有用,很高兴知道它现在正在工作

标签: sql insert


【解决方案1】:

您可以使用NOT EXISTS 以及匹配两个表的可能主键列Book,例如

INSERT INTO table2
SELECT * 
  FROM table1 t1 
 WHERE NOT EXISTS ( SELECT 0 FROM table2 WHERE Book=t1.Book);

Demo

P.S.:在使用 NOT IN 运算符时应注意 NULL 值。此外,使用NOT IN 的性能大多不如使用NOT EXISTS

【讨论】:

  • @Barbaros9Özhan 不,这不起作用,因为第二个表中存在其他行。
  • @Kavya14 你看过演示了吗?
  • @Barbaros9Özhan 是的,我现在明白了。这将起作用。谢谢
  • @Barbaros9Özhan 你能告诉我是否可以在不在之前添加多个列以及如何添加?
  • @Kavya14 确实,您当前的情况可以对当前数据执行您想要的操作,但是通过使用NOT NULL (例如在this demo 中),NULL 值会出现问题。我想你在这一点上寻求帮助......
【解决方案2】:

我试过了,我觉得很好。

可能是你运行了两次脚本,所以它会在第二次显示0 rows created

确保您committed 行。

【讨论】:

  • 是的,它现在正在工作。我一定是第一次犯了一些错误。谢谢。你能告诉我如何在 not in 之前使用 2 列吗?
  • 试试这个Insert into table2 select * from table1 t1 where (t1.book, t1.price) not in (select book, price from table2);
  • 它给出错误,因为“输入必须只有一个输出”
  • 非常感谢!!它奏效了。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多