【发布时间】:2021-09-01 06:08:05
【问题描述】:
我正在尝试获取一个连接表,同时按一列排序并分组。我正在尝试选择以 CU 开头的 CUID,而不是 DEFAULT 值。我已经阅读了 StackOverflow 上发布的答案,看来我做的事情是正确的。我认为这可能只是我缺少的一些小东西。我认为由于插入顺序,order by 不起作用。我想进行查询以使用 DEFAULT 作为其最后一个选项。
SELECT A.*, B.value, B.CUID
FROM A
JOIN B
ON A.ID = B.SettingID
WHERE B.CUID = 'CU1' OR B.CUID = 'DEFAULT'
GROUP BY ID
ORDER BY CUID ASC
在朋友的帮助下,发现由于插入顺序和 B.CUID 按字母顺序排列在“DEFAULT”之后,这仅在某些时候有效。
表 A
| id | Name |
| 1 | blah |
| 2 | was |
| 3 | here |
表 B
| ID | SettingID | Value | CUID |
| 1 | 1 | a | CU1 |
| 2 | 2 | b | CU1 |
| 3 | 1 | c | DEFAULT |
| 4 | 2 | d | DEFAULT |
| 5 | 3 | e | DEFAULT |
没有 GROUP BY 的结果
| SettingID | Name | Value | CUID |
| 1 | blah | a | CU1 |
| 2 | was | b | CU1 |
| 1 | blah | c | DEFAULT |
| 2 | was | d | DEFAULT |
| 3 | here | e | DEFAULT |
GROUP BY 后的结果
| SettingID | Name | Value | CUID |
| 1 | blah | c | DEFAULT |
| 2 | was | d | DEFAULT |
| 3 | here | e | DEFAULT |
预期结果
| SettingID | Name | Value | CUID |
| 1 | blah | a | CU1 |
| 2 | was | b | CU1 |
| 3 | here | e | DEFAULT |
【问题讨论】:
-
查询不正确。请参阅 ONLY_FULL_GROUP_BY sql 模式说明。
-
@Akina 这个查询对我来说很好。
-
查询对我来说很好用。“很好用”和“给出意外结果”不兼容。关于查询。您的数据中有
Value值'a'和'c'对应于SettingID=1。分组后服务器必须返回一个值。您尚未指定必须返回的内容(first-last-greatest-least-etc.)。服务器从他们那里随机返回一个 - 这对它来说是正确的。没有明确描述的任何东西都可以是任何东西。你需要一些确定的价值吗?如果是这样,那么您的查询不符合您的需要 - 即它不正确。 -
@akina 抱歉,我更新了我的问题,使其更具体。该表可以有一个 DEFAULT 设置和任何其他 CUID 设置。只会有另一个。存在 DEFAULT 且 CUID = BLAH 时的示例。我想用 BLAH 抢排。我希望 DEFAULT 成为次要选项。
标签: mysql join group-by sql-order-by