【问题标题】:How can I select rows from a table that don't exist in another table?如何从一个表中选择另一个表中不存在的行?
【发布时间】:2011-04-02 04:08:22
【问题描述】:

我有 2 个表 - 第一个表包含所有唯一数据(列:标题、艺术家、专辑)。第二个表有重复的数据或每天收听 rss 提要的人。

我想将 table2 中的所有数据保存到 table1,但前提是 table2 的行在 table1 中不存在。我想要一个 sql 查询,它将返回 table2 中不在 table1 中的所有行 - 怎么样?

【问题讨论】:

  • 如果您需要有关精确查询的帮助,您至少应该发布架构的相关部分。如果您希望人们帮助您,请提供更多详细信息。
  • 您必须提供 table2 中的列列表,并说明如何确定 table2 中是否存在 table1 行
  • “仅当table1中不存在table2的行”如何确定? table2 中是否存在列标题、艺术家和专辑?您是否要附加 table2 中的所有行,其中 table1 中不存在相同的标题、艺术家和专辑组合?

标签: mysql sql


【解决方案1】:

大概是这样的:

INSERT INTO Table1
(columns)
SELECT columns
FROM Table1
WHERE Table2.UniqueColumn NOT IN (SELECT UniqueColumn FROM Table1)

?

【讨论】:

  • 不,我想选择 table2 中不存在于 table1 中的所有内容的命令,并且 table1 可以包含其他字段,但要检查的字段必须是艺术家专辑和标题
  • 再次感谢你我退出了我以前从未见过这样的 sql :)
  • 没问题。如果您想更认真地了解 SQL,您应该查看基本语法。这里的东西很标准。
  • 一个问题说 table2 有 2 个唯一行,它会插入全部 2 行还是只插入第一行?
  • 它将在 Table2 中插入任何与 Table1 中的 SELECT 中的集合不匹配的行。
【解决方案2】:

假设 title, artist, album 列存在于 Table2 中,并且您想要添加 Table2 中的所有行,而这三者的给定组合在 Table1 中不存在,您可以执行以下操作:

Insert Table1( title, artist, album, ... )
Select title, artist, album, ...
From Table2
Where ( title, artist, album ) Not In   (
                                        Select title, artist, album
                                        From Table1
                                        )

【讨论】:

  • 一个问题说 table2 有 2 个唯一行,它会插入所有 2 行还是只插入第一行?
  • @prx - 如果表 2 中有两行具有相同的一组键,而表 1 中不存在,则两者都将被添加。如果 Table1 对这三列有唯一或主键约束,则会抛出错误。如果这是一个问题,有几个解决方案。一种解决方案是使用对三个值进行分组的 Group By 查询。更安全的选择是只插入一个重复的行,但要求您有一列唯一的整数值(例如 auto_increment 列)。我可以给你看,但你有这样的专栏吗?
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 2012-07-30
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多