2013-12-18 16 views
0

我有一個有兩個數據庫的漫畫網站。第一個表是存儲漫畫信息(問題號碼,作者等)。另一個表用於存儲所有問題圖片的鏈接。通過刪除不必要的信息進行數據庫維護

下面是一個簡單

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 

這將連接兩個數據庫在一起。但我如何刪除任何未鏈接的內容?

回答

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

當你做一個LEFT JOIN它可能是連接表將有NULL所有數據:

SELECT ... WHERE table_pictures.chapter_id IS NULL 

所以,你可以這樣做是爲了找到所有那些鏈接無法正常工作,或作爲逆,RIGHT JOIN並選擇那些不在列表中有WHERE ... NOT IN (SELECT ...)

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