[mysql]从一到多表选择不同的值

标签: sql MySQL
发布时间: 2015/6/11 21:03:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有三个表: 类别、 故事和术语。术语表存储类别与故事的关系。每个故事可以有分配的一个或多个类别。我想要只选择一个类别的一个故事。我使用 DISTINCT 子句上 story_id,但它不工作。请参阅以下查询

SELECT DISTINCT S.story_id, C.cat_id 
  FROM stories S JOIN terms C USING(story_id) 
 LIMIT 3;

和结果

+---+---+
| story_id | cat_id |
+----------+--------+
|      115 |     17 |
|      115 |     20 |
|      115 |     21 |
+---+---+
3 行集 (0.00 秒)

为什么它没有捡起独特的 story_id 任何线索吗?

解决方法 1:

...为什么它没有捡起独特的 story_id 任何线索吗?

因为,它不会返回独特 story_id DISTINCT 适用于所有列SELECT 条款并不是一个单独的列。


自从你...武断选择只有一个类别的故事......你可以使用聚合函数 MIN()MAX()GROUP 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

现在,因为您只返回 story_idcat_id 你甚至不需要加入 storiesterms

SELECT story_id, MIN(cat_id) cat_id
  FROM terms
 GROUP BY story_id 

这里是SQLFiddle演示

官方微信
官方QQ群
31647020