【发布时间】:2020-07-23 16:27:35
【问题描述】:
我正在尝试编写 SQL 查询以从两个表中删除数据 - A、B。它们用一个键连接,我只需要检查B 是否在一列中有特定值reservation。
长话短说,我有rooms 和beds 的桌子,我需要检查room 是否有任何预订。如果没有,我需要删除room 本身及其所有beds。
我尝试了两个查询,但都没有给我预期的结果。表B 比较大,所以我试图在一个查询中使其尽可能快。
-- gives me always 0 records
DELETE
a, b
FROM
rooms a, beds b
WHERE
a.id = b.id_room AND
NOT EXISTS
(SELECT 1 FROM beds WHERE id_room = '45' AND state != 'reservation')
-- deletes all records, but rows where state = 'reservation'
DELETE
a, b
FROM
rooms a, beds b
WHERE
a.id = b.id_room AND id_room = '45' AND state != 'reservation'
示例数据集:
-- rooms
-------------
| id | Name |
-------------
| 1 | 601 |
| 2 | 602 |
| 3 | 603 |
-- beds
-----------------------------|
| id | id_room | state |
-----------------------------|
| 1 | 1 | free |
| 2 | 1 | free |
| 3 | 1 | reservation |
| 4 | 2 | free |
| 5 | 2 | free |
| 6 | 3 | reservation |
预期结果:
房间1 和3 在表beds 的state 列中具有值reservation,因此无法删除。房间 2 没有预订,因此可以删除它,并且应该删除它包括所有床位 - 所以查询应该从表 rooms 中删除记录 2,并从表 @987654343 中删除记录 4 和 5 @。
我总是想只删除一个房间(包括床),所以我需要包含关于房间ID 的条件来计算。
【问题讨论】:
-
样本数据和期望的结果将阐明您想要做什么。
-
更新您的问题,添加适当的数据样本和预期结果为表格文本
-
@scaisEdge ,Gordon Linoff - 我添加了示例数据集并描述了预期结果,我希望它有助于澄清我的问题。