我對電影3個MySQL表。第一個是movie
,二是actor
和最後一個是movie_actor_mapping
。有內選擇加入,GROUP BY BY和WHERE
CREATE TABLE `movie` (
`movie_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(50) DEFAULT NULL,
`year` varchar(9) DEFAULT NULL,
`rating` float(2,1) DEFAULT NULL,
`runtime` varchar(6) DEFAULT NULL,
`plot` varchar(1500) DEFAULT NULL,
PRIMARY KEY (`movie_id`),
UNIQUE KEY `title` (`title`)
)
CREATE TABLE `actor` (
`actor_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
PRIMARY KEY (`actor_id`),
UNIQUE KEY `name_en` (`name`)
)
CREATE TABLE `movie_actor_mapping` (
`movie_actor_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`movie_id` int(10) unsigned DEFAULT NULL,
`actor_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`movie_actor_id`),
UNIQUE KEY `movie_actor_id` (`movie_actor_id`)
)
有些電影在評級NULL
當我做SELECT
我必須選擇具有等級的所有電影和等級排序。我SELECT
樣子:
SELECT *, group_concat(a.name separator ', ') as actors
FROM movie m INNER JOIN movie_actor_mapping ma
ON m.movie_id=ma.movie_id
INNER JOIN actor a
ON a.actor_id=ta.actor_id
GROUP BY m.movie_id;
此外,我寫了一個select
和order
SELECT * FROM movie WHERE rating is not null ORDER BY rating DESC;
,但我不明白如何分割這些查詢。我知道,如果我不會有GROUP BY
- 我可以ON
後寫我的第二個查詢,但如何在使用GROUP BY
辦?
UPD:
我從我的表添加示例數據。因此,對於movie
是:
1 | "American Horror Story" | "2011–" | 8.2 | "60 min" | "Both physical..."
從actor
表的數據:
1 | Evan Rachel Wood
從movie_actor_mapping
:
1 | 21 | 1
可以你請給我一些樣本數據和預期產出? – Faisal
Hi @Faisal,我更新了我的文章! – rel1x
您的樣品數據不清楚,請嘗試添加更多的細節,如更多列 – Faisal