2

我有一个复杂的问题。

如何强制 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 关键字,但我真的不知道如何正确使用它。

谢谢你的时间。

多米尼克

4

1 回答 1

2

我认为您的“模式”列构成优先级,并且您想要结果集中唯一具有最低优先级的“右”的不同值。

尝试将此查询包装在您给我们的查询周围:

  SELECT Right,
         MIN(Mode) AS Mode,
    FROM (
      /* your big query */
         ) AS q
   GROUP BY Right

那会给你你想要的。顺便说一句,如果这样做,您可以DISTINCT从主查询中删除关键字;将GROUP BY填补相同的目的。

于 2013-11-09T13:35:47.270 回答