【发布时间】:2018-10-31 05:07:06
【问题描述】:
我需要编写一个 SQL 查询,该查询需要删除所有为空的书籍。
到目前为止,我已经创建了一个查询,显示哪些书被空了:
显示哪些书已被取消的查询
现在我需要计算 SQL 查询以删除所有无效的书籍。我假设查询是:
【问题讨论】:
-
book_num 是唯一的吗?
标签: sql oracle sql-delete
我需要编写一个 SQL 查询,该查询需要删除所有为空的书籍。
到目前为止,我已经创建了一个查询,显示哪些书被空了:
显示哪些书已被取消的查询
现在我需要计算 SQL 查询以删除所有无效的书籍。我假设查询是:
【问题讨论】:
标签: sql oracle sql-delete
你可以试试下面
DELETE FROM BOOK
WHERE EXISTS (SELECT 1 FROM BOOK B
FULL JOIN CHECKOUT C ON C.BOOK_NUM = B.BOOK_NUM
WHERE C.CHECK_OUT_DATE IS NULL);
【讨论】:
我不确定FULL JOIN 在定义良好的数据模型中做了什么。大概,你想要:
DELETE FROM BOOK
WHERE NOT EXISTS (SELECT 1
FROM CHECKOUT C
WHERE C.BOOK_NUM = B.BOOK_NUM AND
C.CHECK_OUT_DATE IS NOT NULL
);
【讨论】:
DELETE FROM BOOK
WHERE BOOK_NUM IN
(SELECT B.BOOK_NUM
FROM BOOK B FULL JOIN CHECKOUT C ON C.BOOK_NUM = B.BOOK_NUM
WHERE C.CHECK_OUT_DATE IS NULL);
内部查询将选择所有没有 check_out_date 的 book_num。 如果内部查询返回 book_num,外部查询将删除 books 表中存在的书籍。
【讨论】: