2013-06-24 59 views
0

我有以下兩個SQL查詢:如何將SELECT和DELETE語句與相同的條件結合使用?

SELECT u.user FROM 
mcmmo_skills AS s, 
mcmmo_users AS u 
WHERE s.user_id = u.id 
AND (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0; 

DELETE FROM u, e, h, s, c USING mcmmo_users u 
JOIN mcmmo_experience e ON (u.id = e.user_id) 
JOIN mcmmo_huds h ON (u.id = h.user_id) 
JOIN mcmmo_skills s ON (u.id = s.user_id) 
JOIN mcmmo_cooldowns c ON (u.id = c.user_id) 
WHERE (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0; 

數據庫架構如下圖所示:http://sqlfiddle.com/#!2/298cc

這些聲明的目的是去除什麼也沒有做任何的用戶,並得到了他們的用戶名一些額外的清理Java端。作爲我們在JDBC中運行PreparedStatement的一部分,我看到了這一點,並認爲如果我們可以運行一個PreparedStatement,它會刪除用戶,並將用戶列表全部返回到一個整齊的包中,這將更加簡潔。

當我研究這個時,我遇到SELECT FROM OLD TABLE (DELETE ....) - 但是it appears this is only available in DB/2,而且你知道它是如何發生的 - 無法切換。

那麼,如何讓我的DELETE語句在MySql中返回用戶名呢?

(要說它的另一種方式,我想要一些SQL一個刪除,我可以把一個Statement,運行​​並有getResultSet()沒有返回null行。)

回答

1

所以,我怎樣才能讓我的DELETE語句在MySql中返回用戶名?

不幸的是,你不能在MySql中用一條語句來做到這一點。你可以做的是創建一個存儲過程,它將返回結果集並在之後刪除。

DELIMITER $$ 
CREATE PROCEDURE mcmmo_select_and_delete() 
BEGIN 
    SELECT u.user FROM 
    mcmmo_skills AS s, 
    mcmmo_users AS u 
    WHERE s.user_id = u.id 
    AND (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+ 
     s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0; 

    DELETE FROM u, e, h, s, c USING mcmmo_users u 
    JOIN mcmmo_experience e ON (u.id = e.user_id) 
    JOIN mcmmo_huds h ON (u.id = h.user_id) 
    JOIN mcmmo_skills s ON (u.id = s.user_id) 
    JOIN mcmmo_cooldowns c ON (u.id = c.user_id) 
    WHERE (s.taming+s.mining+s.woodcutting+s.repair+s.unarmed+s.herbalism+ 
     s.excavation+s.archery+s.swords+s.axes+s.acrobatics+s.fishing) = 0; 
END$$ 
DELIMITER ; 
相關問題