删除不必要的信息来维护数据库

时间:2013-12-18 21:02:06

标签: mysql

我有一个有两个数据库的漫画网站。第一个表是存储漫画信息(问题的数量,作者等)。另一个表用于存储所有问题图片的链接。

这是一个示例

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

这会将两个数据库链接在一起。但是如何删除任何未链接的内容?

3 个答案:

答案 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
);