【问题标题】:Comparing two tables and deleting stale data比较两个表并删除陈旧数据
【发布时间】:2014-06-13 20:43:01
【问题描述】:

我正在尝试删除基于另一个表的表中的陈旧记录。我们的问题是,课程是在 Table_A 中的两个不同建筑物中为学生提供的。我们需要根据 Student_ID 和 Building 比较 Table_ATable_B。如果学生的Table_B大楼与Table_A不匹配,删除不属于同一大楼的记录,但保留同一大楼内的记录。

Table_A 包含学生日程:

  • SCHOOL_YEAR
  • STUDENT_ID
  • 建筑
  • 课程

Table_B 包含学生注册:

  • STUDENT_ID
  • 建筑

这是我想出的:

DELETE FROM Table_A
WHERE exists 
(SELECT Table_B.STUDENT_ID, Table_B.BUILDING, TABLE_A.BUILDING 
FROM TABLE_B
INNER JOIN TABLE_A ON Table_B.STUDENT_ID = Table_A.STUDENT_ID 
AND Table_B.BUILDING <> Table_A.BUILDING
AND Table_A.SCHOOL_YEAR = 2015)

【问题讨论】:

  • 不清楚您当前查询的哪一部分不起作用。也许是一些示例数据或fiddle
  • @paqogomez,语法错误。
  • 许多数据库有不同的语法来根据另一个表的值删除一个表的内容。您正在运行哪个数据库?这将有助于获得更好的答案。 :)

标签: sql compare sql-delete records


【解决方案1】:

你可以这样做:

DELETE FROM Table_A
WHERE STUDENT_ID IN (SELECT a.STUDENT_ID
                     FROM TABLE_B b
                     JOIN TABLE_A a ON (a.STUDENT_ID = b.STUDENT_ID)
                     WHERE a.BUILDING <> b.BUILDING
                       AND a.SCHOOL_YEAR = 2015)

【讨论】:

  • 我尝试了相同的脚本,它给了我相同的结果。它正在删除所有记录。我最终创建了一个只有我想要的数据的临时表,并找到了临时表中不存在的记录。感谢大家的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多