【问题标题】:SQL Delete similar EntriesSQL 删除相似条目
【发布时间】:2017-04-23 03:19:20
【问题描述】:

SQL 问题。 我目前有两个 SQL 表 一个称为 Waitlist 的表和一个称为 Booking 的表。它们不相同(候补名单包含比预订更多的信息)。它们看起来像这样:

候补名单:

#   Customer    Day                 Timestamp                   Flight
1   Joseph     2017-04-22      2017-04-22 16:20:33.178     F101

预订:

#   Customer    Flight  Day
1   Timmy   F101    2017-04-22
2   Joseph  F101    2017-04-22

我想从候补名单中删除重复的数据(在本例中为 joseph 条目).... 我尝试了以下方法: 从候补名单中删除 Customer = booking.customer 和 day = booking.day 和 flight = booking.flight 我也尝试过没有运气的 INNER JOIN。 请帮忙!!

【问题讨论】:

  • delete the duplicate data from waitlist ... 我在waitlist 中只看到一条记录。顺便问一下,您使用的是哪个数据库(例如 MySQL、Oracle 等)?
  • 我正在使用 Derby 数据库和 JDBC。对于我的问题不清楚,我很抱歉,我想知道如何删除候补名单中的第一个也是唯一一个条目,因为我在预订中有它。谢谢

标签: sql jdbc derby


【解决方案1】:

有多种方法可以实现您的目标,但最适合您问题的答案是特定于数据库供应商

即在 MySQL 和 SQL Server 中,您可以直接在 DELETE 语句中使用 JOIN

DELETE w 
  FROM waitlist w JOIN booking b 
    ON w.customer = b.customer
   AND w.day = b.day
   AND w.flight = b.flight; 

Sqlfiddle 用于 MySql,Sqlfiddle 用于 SQL Server

在 PostgreSQL 中,您可以利用 EXISTS

DELETE FROM waitlist w
 WHERE EXISTS (
     SELECT *
       FROM booking
      WHERE customer = w.customer
        AND day = w.day
        AND flight = w.flight
);

SqlFiddle

【讨论】:

  • 感谢您的回答!我正在使用 Derby 数据库和 JDBC,我已经尝试了您提到的方法,但我似乎仍然遇到语法错误 SQLException。
  • waitlist 表中是否有唯一的 id 列?我猜# 不是该列的名称...
  • 我无法获得第一个工作答案,但第二个工作完美。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2020-03-26
相关资源
最近更新 更多