我有三个表:类别、故事和术语。术语表存储类别和故事的关系。每个故事都可以分配一个或多个类别。我只想为一个故事选择一个类别。我DISTINCT在story_id上使用了子句,但它不起作用。请参阅以下查询
SELECT DISTINCT S.story_id, C.cat_id
FROM stories S JOIN terms C USING(story_id)
LIMIT 3;
Run Code Online (Sandbox Code Playgroud)
和结果
+----------+--------+ | 故事ID | 猫ID | +----------+--------+ | 115 | 115 17 | 17 | 115 | 115 20 | | 115 | 115 21 | 21 +----------+--------+ 3 行一组(0.00 秒)
有什么线索为什么它没有获取唯一的 Story_id 吗?
...有任何线索为什么它没有获取唯一的 Story_id 吗?
它不会返回唯一的story_id,因为DISTINCT适用于子句中的所有列SELECT而不是单个列。
由于您...只想为故事选择一个类别...您可以使用聚合函数MIN()或MAX()withGROUP BY来执行此操作
SELECT s.story_id, MIN(c.cat_id) cat_id
FROM stories s JOIN terms c
ON s.story_id = c.story_id
GROUP BY s.story_id
Run Code Online (Sandbox Code Playgroud)
现在既然你只是回来story_id,cat_id你甚至不需要stories加入terms
SELECT story_id, MIN(cat_id) cat_id
FROM terms
GROUP BY story_id
Run Code Online (Sandbox Code Playgroud)
这是SQLFiddle演示
| 归档时间: |
|
| 查看次数: |
4284 次 |
| 最近记录: |