从一对多表中选择不同值

Max*_*mus 1 mysql sql

我有三个表:类别、故事和术语。术语表存储类别和故事的关系。每个故事都可以分配一个或多个类别。我只想为一个故事选择一个类别。我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 吗?

pet*_*erm 5

...有任何线索为什么它没有获取唯一的 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_idcat_id你甚至不需要stories加入terms

SELECT story_id, MIN(cat_id) cat_id
  FROM terms
 GROUP BY story_id 
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示