Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除MySQL查询中未使用重新编码的行_Mysql_Sql_Database - Fatal编程技术网

如何删除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
此查询(以及您的查询)不会返回没有书籍的“author”行。但如果确实要删除这些行:

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)