mysql - group_concat 在 SQL 查询中多次显示相同的记录

标签 mysql sql

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

这是我的代码

DROP TABLE tmdb_movies;
CREATE TABLE tmdb_movies (
  tmdb_id INTEGER NOT NULL PRIMARY KEY,
  movie_title TEXT NOT NULL
);

INSERT INTO tmdb_movies (tmdb_id, movie_title) VALUES
(1, 'The Dark Knight');

DROP TABLE recommendations;
CREATE TABLE recommendations (
  recommendations_tmdb_id INTEGER NOT NULL,
  recommendations_title TEXT NOT NULL,
  recommendations_vote_average TEXT NOT NULL
);




INSERT INTO recommendations (recommendations_tmdb_id, recommendations_title, recommendations_vote_average) VALUES
(1, 'The Dark Knight Rises', '7.5'),
(1, 'Batman Begins', '7.5'),
(1, 'Iron Man', '7.3'),
(1, 'The Lord of the Rings: The Return of the King', '8.1'),
(1, 'The Lord of the Rings: The The Fellowship of the Ring', '8'),
(1, 'The Lord of the Rings: The Two Towers', '7.9'),
(1, 'The Matrix', '7.9'),
(1, 'Inception', '8'),
(1, 'Iron Man 2', '6.6'),
(1, 'Captain America: The First Avenger', '6.6');

DROP TABLE cast;
CREATE TABLE cast (
  cast_tmdb_id INTEGER NOT NULL,
  cast_name TEXT NOT NULL,
  cast_character TEXT NOT NULL
);

INSERT INTO cast (cast_tmdb_id, cast_name, cast_character) VALUES
(1, 'Christian Bale', 'Bruce Wayne / Batman'),
(1, 'Michael Caine', 'Alfred Pennyworth'),
(1, 'Heath Ledger', 'The Joker'),
(1, 'Aaron Eckhart', 'Harvey Dent / Two-Face'),
(1, 'Gary Oldman', 'Lt. James Gordon'),
(1, 'Maggie Gyllenhaal', 'Rachel Dawes'),
(1, 'Morgan Freeman', 'Lucius Fox'),
(1, 'Chin Han', 'Lau'),
(1, 'Eric Roberts', 'Salvatore Maroni'),
(1, 'Monique Gabriela Curnen', 'Ramirez');



SELECT tmdb_movies.movie_title
,GROUP_CONCAT(recommendations.recommendations_title) as recommendations_title
,GROUP_CONCAT(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

Complete SQL Fiddle

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

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

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

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

QL

最佳答案

您想要这个结果吗?

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

关于mysql - group_concat 在 SQL 查询中多次显示相同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44940435/

相关文章:

SQL - 带有 JOIN 的 SELECT 语句

sql - MySql 计数查询

python - pymysql - 谷歌云 - 操作错误 : (2003, "Can' t 连接到 MySQL 服务器

mysql - 在不指定值的情况下查找三列中重复的行?

Mysql Equal String 返回 0 行,LIKE String 返回 1 行

Mysql 数据库不显示 NOW() 函数的当前日期

sql - 插入并返回子查询

java - MYSQL插入查询不更新数据到JAVA表中

c# - 如何通过 LINQ-to-SQL 和普通 SQL-Server 比较查询的性能

Phpmyadmin 没有显示 mysql 数据库中的所有表