我遇到了一个复杂的问题。
如何强制MySQL用第二个“command.deagle2”(模式0)替换第一个“command.deagle2”(模式1)?
我只是告诉你代码,我希望你能帮助我。
这是我的代码:
SELECT DISTINCT
`right`.`name` AS `Right`,
1 AS `Mode`
FROM
`user`
INNER JOIN
`user_group` ON
`user`.`id` = `user_group`.`user_id`
INNER JOIN
`group` ON
`user_group`.`group_id` = `group`.`id`
INNER JOIN
`group_right` ON
`group`.`id` = `group_right`.`group_id`
INNER JOIN
`right` ON
`group_right`.`right_id` = `right`.`id`
WHERE
`user`.`username` = 'Dominik'
UNION
SELECT DISTINCT
`right`.`name` AS `Right`,
`user_right`.`mode` AS `Mode`
FROM
`user`,
`right`,
`user_right`
WHERE
`user`.`id` = `user_right`.`user_id` AND
`right`.`id` = `user_right`.`right_id` AND
`user`.`username` = 'Dominik'
此查询返回以下结果:
Right | Mode
-----------------------
command.deagle | 1
command.deagle2 | 1
command.gmx | 1
command.givegun | 1
command.deagle2 | 0
示例数据集:http://pastebin.com/m5LHsDRi
我已经看到有一个REPLACE关键字,但我真的不知道如何正确使用它。
谢谢你的时间。
多米尼克
答案 0 :(得分:2)
我认为你的“模式”列构成了一个优先级,并且你只想要结果集中具有编号最小的优先级的“Right”的唯一值。
尝试围绕您提供给我们的查询包装此查询:
SELECT Right,
MIN(Mode) AS Mode,
FROM (
/* your big query */
) AS q
GROUP BY Right
那会给你你想要的东西。顺便说一句,如果您这样做,可以从主查询中删除DISTINCT
关键字; GROUP BY
将填充相同的目的。