0

我有以下两个 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 端清理。作为我们PreparedStatement在 JDBC 中向 s 迈进的一部分,我看到了这一点,并认为如果我们可以运行一个 PreparedStatement,它会删除用户,并将用户列表全部返回到一个整洁的包中,这样会更干净。

当我研究这个时,我遇到了SELECT FROM OLD TABLE ( DELETE .... )- 但它似乎只在 DB/2 中可用,而且你知道它是怎么回事 - 无法切换。

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

(换句话说,我想要一些 SQL 来删除我可以放入 a 中的行Statement,运行execute()并且getResultSet()没有返回 null。)

4

1 回答 1

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 ;
于 2013-06-24T02:21:31.630 回答