【发布时间】:2014-07-03 04:04:08
【问题描述】:
我正在尝试创建一个不会返回具有相同 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,但我非常不确定解决这个问题的方向。任何帮助是极大的赞赏。谢谢!
【问题讨论】:
-
“第一行”是什么意思?第一个根据标签的字母顺序?如果是这样,标签是否总是不同的?
-
我的意思是第一行,因为它存在于数据库中。标签只是区分行的一种方式,因此可以更容易地注意到具有相似 id 的行在结果中只出现一次。
-
如果不按“数据库中存在的第一行”进行排序,则取决于索引/缓存等,它是伪随机的。它不会自行跟踪插入顺序。
-
不应考虑“存在于数据库中”的行顺序,因为这可能会根据数据库版本等而改变。简而言之 - 这是不稳定的解决方案:) 更好地按标签排序。跨度>
-
在我的情况下,如果他们有重复的 id 并且没有指定主要的,我选择哪一个并不重要,但我一定会在未来牢记这一点。感谢您的反馈!