我正在尝试创建一个不会返回具有相同 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/