我有2个表:Books
和Authors
。
这是我的SQL查询,用于显示书籍及其作者:
SELECT * FROM `tbl_books`, `tbl_author` WHERE `tbl_books`.`id` = `tbl_author`.`author_id`
我的问题是,有100多位作者,但只有少数人拿着一本书, 因此我想删除其余没有多少本书的作者。我该怎么办?
答案 0 :(得分:0)
编写此查询的正确方法是:
SELECT * -- you should be explicit about the columns here
FROM tbl_books b JOIN
tbl_author a
ON b.id = a.author_id;
注意:
FROM
子句中使用逗号。 始终使用正确的,明确的,标准 JOIN
语法。JOIN
条件应为b.author_id = a.author_id
。此查询(和您的查询)将不返回没有书籍的“作者”行。但是,如果您实际上要删除这些行:
delete a from tbl_authors a
where not exists (select 1 from tbl_books b where b.author_id = a.author_id);
但是,您似乎不太可能拥有一个包含作者和书籍的数据库,但是authors表中的行没有书籍。
答案 1 :(得分:0)
我同意加入条件应为b.author_id = a.author_id
您可以尝试以下SQL查询,使用LEFT JOIN和NOT IN函数
DELETE FROM tbl_author a
WHERE a.author_id NOT IN (SELECT b.author_id
FROM tbl_books b);
使用LEFT JOIN的另一种方式
DELETE a FROM tbl_author a
LEFT JOIN tbl_books b ON a.author_id = b.author_id
WHERE b.author_id IS NULL;
答案 2 :(得分:0)
问题已解决 使用NOT IN删除未使用的记录
从tbl_author
到tbl_author
的地方删除。author_id
不在(选择author_id
的{{1}})