我有一个有两个数据库的漫画网站。第一个表是存储漫画信息(问题的数量,作者等)。另一个表用于存储所有问题图片的链接。
这是一个示例
table_meta
chapter_id | chapter_name | chapter_author
123 | whatever!! | someone
987 | whatever!!2 | someone
table_pictures
chapter_id | picture_num | picture_ext
123 | 001 | jpg
123 | 002 | jpg
正如您所见,chapter_id
987在table_pictures
表格中没有任何内容。我想要一个删除所有这些不必要信息的mysql查询。以下是我提出的建议:
SELECT * FROM `table_meta`
LEFT JOIN `table_pictures` ON table_meta.chapter_id = table_pictures.chapter_id
这会将两个数据库链接在一起。但是如何删除任何未链接的内容?
答案 0 :(得分:2)
执行LEFT JOIN
时,联接表可能会为所有数据NULL
:
SELECT ... WHERE table_pictures.chapter_id IS NULL
因此,您可以执行此操作以查找链接不起作用的所有内容,或作为反向RIGHT JOIN
,并选择列表中不包含WHERE ... NOT IN (SELECT ...)
答案 1 :(得分:2)
以下是如何取消LEFT JOIN
并将其用于删除table_meta
中的数据的示例:
DELETE table_meta
FROM table_meta
LEFT JOIN table_pictures ON table_meta.chapter_id = table_pictures.chapter_id
WHERE ISNULL(table_pictures.chapter_id);
答案 2 :(得分:1)
DELETE FROM table_meta WHERE chapter_id NOT IN(
SELECT chapter_id FROM table_pictures
WHERE table_meta.chapter_id = table_pictures.chapter_id
);