如何将SELECT和DELETE语句与相同的条件组合在一起?

时间:2013-06-24 01:46:16

标签: mysql sql jdbc

我有以下两个SQL查询:

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 s的运动的一部分,我看到了这一点,并认为如果我们可以运行一个PreparedStatement,删除用户,并在一个整齐的包中返回用户列表,那将会更加清晰。

当我研究这个时,我遇到SELECT FROM OLD TABLE ( DELETE .... ) - 但是it appears this is only available in DB/2,你知道它是怎么回事 - 无法切换。

那么,如何让我的DELETE语句返回MySql中的用户名?

(换句话说,我想要一些SQL删除我可以放在Statement中的行,运行execute()并让getResultSet()不返回null。)

1 个答案:

答案 0 :(得分: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 ;