Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从一对多表中选择不同的值_Mysql_Sql - Fatal编程技术网

Mysql 从一对多表中选择不同的值

Mysql 从一对多表中选择不同的值,mysql,sql,Mysql,Sql,我有三个表格:类别、故事和术语。术语表存储类别和故事关系。每个故事可以指定一个或多个类别。我只想为一个故事选择一个类别。我在story\u id上使用了DISTINCT子句,但它不起作用。请参阅下面的查询 SELECT DISTINCT S.story_id, C.cat_id FROM stories S JOIN terms C USING(story_id) LIMIT 3; 和结果 +----------+--------+ | story_id | cat_id | +--

我有三个表格:类别、故事和术语。术语表存储类别和故事关系。每个故事可以指定一个或多个类别。我只想为一个故事选择一个类别。我在story\u id上使用了
DISTINCT
子句,但它不起作用。请参阅下面的查询

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 rows in set (0.00 sec) +----------+--------+ |故事|猫| id| +----------+--------+ | 115 | 17 | | 115 | 20 | | 115 | 21 | +----------+--------+ 一组3行(0.00秒) 有什么线索说明为什么它没有找到唯一的故事id吗?

试试这个:

SELECT DISTINCT S.story_id, C.cat_id FROM stories AS S
INNER JOIN terms AS C ON(S.cat_id = C.cat_id)
GROUP BY S.story_id
试试这个:

SELECT DISTINCT S.story_id, C.cat_id FROM stories AS S
INNER JOIN terms AS C ON(S.cat_id = C.cat_id)
GROUP BY S.story_id
…有没有线索说明为什么它没有收集到独特的故事id

它不会返回唯一的故事id,因为
DISTINCT
应用于
SELECT
子句中的所有列,而不是单个列


因为您…只想为一个故事选择一个类别。。。您可以将聚合函数
MIN()
MAX()
groupby
一起使用来完成此操作

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\u id
cat\u id
,因此您甚至不需要加入
stories
terms

SELECT story_id, MIN(cat_id) cat_id
  FROM terms
 GROUP BY story_id 
这里是演示

…有没有线索说明为什么它没有收集到独特的故事id

它不会返回唯一的故事id,因为
DISTINCT
应用于
SELECT
子句中的所有列,而不是单个列


因为您…只想为一个故事选择一个类别。。。您可以将聚合函数
MIN()
MAX()
groupby
一起使用来完成此操作

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\u id
cat\u id
,因此您甚至不需要加入
stories
terms

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

这里是<强> <强> demo < /p> < p> <代码> S.SturySyID,C.CasyId >将SturySyID和CasyID视为一个实体,并删除重复。如果您需要获得不同的

故事id
,则可以在下面进行尝试

SELECT S.story_id, C.cat_id FROM stories AS S
INNER JOIN terms AS C ON(S.cat_id = C.cat_id)
GROUP BY S.story_id
HAVING COUNT(*) >=1

<代码> S.SturySyID,C.CasyId将将SturySyID和CasyID视为一个实体并删除重复。如果您需要获得不同的

故事id
,则可以在下面进行尝试

SELECT S.story_id, C.cat_id FROM stories AS S
INNER JOIN terms AS C ON(S.cat_id = C.cat_id)
GROUP BY S.story_id
HAVING COUNT(*) >=1

切勿混合
DISTINCT
groupby
切勿混合
DISTINCT
groupby
谢谢您的解释谢谢您的解释