如何删除MySQL查询中未使用重新编码的行
我有两个表格:如何删除MySQL查询中未使用重新编码的行,mysql,sql,database,Mysql,Sql,Database,我有两个表格:书籍和作者 这是我的SQL查询,用于显示书籍及其作者: SELECT * FROM `tbl_books`, `tbl_author` WHERE `tbl_books`.`id` = `tbl_author`.`author_id` 我的问题是,有100多位作者,但只有少数人持有一本书, 所以我想删除那些没有多少书的作者。我如何才能做到这一点?编写此查询的正确方法是: SELECT * -- you should be explicit about the columns h
书籍
和作者
这是我的SQL查询,用于显示书籍及其作者:
SELECT * FROM `tbl_books`, `tbl_author` WHERE `tbl_books`.`id` = `tbl_author`.`author_id`
我的问题是,有100多位作者,但只有少数人持有一本书,
所以我想删除那些没有多少书的作者。我如何才能做到这一点?编写此查询的正确方法是:
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
b.author\u id=a.author\u id
delete a from tbl_authors a
where not exists (select 1 from tbl_books b where b.author_id = a.author_id);
但是,似乎不太可能有一个包含作者和书籍的数据库,但是authors表中的行没有书籍。我同意连接条件应该是b.author\u id=a.author\u id 您可以尝试下面的SQL查询,使用左连接而不是在函数中
DELETE FROM tbl_author a
WHERE a.author_id NOT IN (SELECT b.author_id
FROM tbl_books b);
使用左连接的另一种方法
DELETE a FROM tbl_author a
LEFT JOIN tbl_books b ON a.author_id = b.author_id
WHERE b.author_id IS NULL;
问题解决
不用于删除未使用的记录
从
tbl\u author
中删除tbl\u author
author\u id
不在(从tbl\u books
中选择author\u id
)您需要提供输入数据和所需输出是的,在authors表中没有书籍的行。tbl_图书(id、作者id、标题、img、视图、费率)tbl_作者(作者id、姓名、img)