【问题标题】:group_concat is displaying same records multiple times in SQL Querygroup_concat 在 SQL Query 中多次显示相同的记录
【发布时间】:2017-07-06 15:16:31
【问题描述】:

注意:使用DISTINCT 不会解决问题。 (我会解释原因)

这是我的代码

删除表 tmdb_movies; 创建表 tmdb_movies ( tmdb_id INTEGER NOT NULL PRIMARY KEY, movie_title 文本不为空 ); 插入 tmdb_movies(tmdb_id,movie_title)值 (1,“黑暗骑士”); DROP TABLE 建议; CREATE TABLE 建议 ( 建议_tmdb_id INTEGER NOT NULL, 推荐标题文本不为空, 推荐投票平均文本不为空 ); 插入建议(recommendations_tmdb_id、recommendations_title、recommendations_vote_average)值 (1,“黑暗骑士崛起”,“7.5”), (1,“蝙蝠侠开始”,“7.5”), (1,“钢铁侠”,“7.3”), (1,《指环王:王者归来》,《8.1》), (1,《指环王:魔戒团契》,'8'), (1,《指环王:两塔》,《7.9》), (1,“矩阵”,“7.9”), (1,“盗梦空间”,“8”), (1、《钢铁侠2》、《6.6》)、 (1,《美国队长:第一复仇者》,《6.6》); DROP TABLE 演员表; 创建表强制转换( cast_tmdb_id 整数非空, cast_name 文本不为空, cast_character 文本不为空 ); 插入转换(cast_tmdb_id、cast_name、cast_character)值 (1,“克里斯蒂安·贝尔”,“布鲁斯·韦恩 / 蝙蝠侠”), (1,“迈克尔凯恩”,“阿尔弗雷德彭尼沃斯”), (1,“希斯莱杰”,“小丑”), (1,'Aaron Eckhart','Harvey Dent / Two-Face'), (1,“加里·奥德曼”,“詹姆斯·戈登中尉”), (1,“玛吉·吉伦哈尔”,“瑞秋·道斯”), (1,“摩根弗里曼”,“卢修斯福克斯”), (1, 'Chin Han', 'Lau'), (1,“埃里克·罗伯茨”,“萨尔瓦多·马罗尼”), (1,“莫妮克·加布里埃拉·柯南”,“拉米雷斯”); 选择 tmdb_movies.movi​​e_title ,GROUP_CONCAT(recommendations.recommendations_title) 作为推荐标题 ,GROUP_CONCAT(recommendations.recommendations_vote_average) 作为推荐_投票_平均 来自 tmdb_movies LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id LEFT JOIN 建议 ON Recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id 其中 tmdb_movies.tmdb_id= 1 按 tmdb_movies.movi​​e_title 分组

Complete SQL Fiddle

如您所见,recommendations 表中的记录显示了多次。但是如果我删除这条线LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id 然后,它们不会显示多次。所以这条线是主要问题。

为了简单起见,我没有在我的 SQL 查询中使用强制转换表。但我需要它。

是的,我需要 group_concat 在我的 PHP 代码中一起显示记录

为什么DISTINCT 解决不了问题?好吧,有些电影具有相同的评级,例如:7.5。因此,并非所有电影的评分都会显示。这就是为什么,你可以自己尝试,尝试在小提琴中使用

QL

【问题讨论】:

  • 当你在另一个问题中有几个广泛的答案时,你为什么要提出一个新问题?
  • 您不是just ask this same question 使用了其他帐户吗?
  • @TimBiegeleisen 这比你想象的还要糟糕。这是同一“其他帐户”上的原件。 stackoverflow.com/questions/44931926/…
  • 你是看我在另一个问题中的回答,还是看 sqlfiddle?
  • 伙计们、我和托比正在共同开展这个项目。 Toby 让我从我的帐户中询问,因为 Shadow 不公平地锁定了该主题。 (它不是重复的)。谢谢大家

标签: mysql sql


【解决方案1】:

你想要这个结果吗?

SELECT tmdb_movies.movie_title
,GROUP_CONCAT(DISTINCT(recommendations.recommendations_title)) as recommendations_title
,GROUP_CONCAT(DISTINCT(recommendations.recommendations_vote_average)) as recommendations_vote_average

FROM tmdb_movies  

LEFT JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmdb_id
LEFT JOIN recommendations ON recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id

Where tmdb_movies.tmdb_id= 1

GROUP BY tmdb_movies.movie_title

【讨论】:

  • 没有兄弟。正如我在上面的问题中所说,如果我在 Recommendations_vote_average 列中使用 DISTINCT。然后,只会出现 6 列。因为有些电影有相同的 vote_average
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多