我有以下两个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。)
答案 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 ;