mysql - 从 SQL 查询中删除重复项

标签 mysql sql

我正在尝试创建一个不会返回具有相同 ID 的行的 SQL 查询。我还想指定一个主行,以便在两行具有相同 ID 的情况下,将返回主行。如果未指定主行,我想返回第一行。

这是我要查询的数据库的示例。

+----+---------+-------+
| id | primary | label |
+----+---------+-------+
| 1  |    Y    |   A   |
| 1  |         |   B   |  
| 2  |         |   C   |
| 2  |         |   D   |
| 3  |         |   E   |
+----+---------+-------+

这是我想要达到的结果的一个例子

+----+---------+-------+
| id | primary | label |
+----+---------+-------+
| 1  |    Y    |   A   |
| 2  |         |   C   |
| 3  |         |   E   |
+----+---------+-------+

我一直在尝试使用 select distinct,但我不确定要解决这个问题的方向。任何帮助是极大的赞赏。谢谢!

最佳答案

在您的情况下,子查询比 DISTINCT 更合适。

试试下面的。这是它获得所需结果的演示:http://sqlfiddle.com/#!2/97fdd3/1/0

顺便说一句,当 ID 没有“主要”时,这将为该 ID 选择最低的标签值。正如其他人所说,这比“数据库中的顺序”更可靠。

select *
  from tbl t
 where t.label = (select x.label
                    from tbl x
                   where x.primary = 'Y'
                     and x.id = t.id)
    or (not exists
        (select 1
           from tbl x
          where x.primary = 'Y'
            and x.id = t.id) and
        t.label = (select min(x.label) from tbl x where x.id = t.id))

关于mysql - 从 SQL 查询中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665851/

相关文章:

java - 使用 Java 将表从数据库导出到 XML 文件

sql - 从空表中删除永远

sql - 执行 SQL 数据导出的更简单方法 - Azure

sql - PostgreSQL WITH .. AS() 难点

mysql - 以不同方式显示查询结果

MYSQL批量改表引擎

mysql - 所有四个部门的通缉犯

SQL:至少出现两次的元素数

python - 在 Python 中使用 mysql.connector 处理格式参数失败

shell脚本运行MySQL命令报错