为什么不能按选择的分隔符顺序使用等号?

时间:2019-01-23 19:03:33

标签: postgresql

假设我有

List<Record> result = new ArrayList<>(map.values());

这有效。

但是,如果我说

select distinct id, flavor from bageltown order by id, flavor

我收到一个错误,指出元素中不存在元素。

这当然是通过将查询编辑为这样来解决的:

select distinct id, flavor from bageltown order by id, flavor='lox' desc, flavor

但是我想知道-为什么必须在输出中添加布尔列?

1 个答案:

答案 0 :(得分:2)

DISTINCT(而不是DISTINCT ON)的目的是删除结果表中的重复行。在您的特定情况下(由于结果表中有id,这可能不必担心,但是如果您按flavor='lox'排序并且flavor='lox'不是结果列,无法保证没有任何行表示(如果不是要删除重复项的话)同时具有flavor='lox'flavor<>'lox',并且不清楚如何对它们进行排序。如果将flavor='lox''flavor<>'lox'视为单独的行,那么您将回到表中有重复的行。