MySQL如何检查结果中是否已存在值?

时间:2013-11-09 13:29:59

标签: mysql sql

我遇到了一个复杂的问题。

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

谢谢你的时间。

多米尼克

1 个答案:

答案 0 :(得分:2)

我认为你的“模式”列构成了一个优先级,并且你只想要结果集中具有编号最小的优先级的“Right”的唯一值。

尝试围绕您提供给我们的查询包装此查询:

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

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