mysql - 从两个 MySQL 表中选择时出错

标签 mysql

我有 3 个表:movieactormovie_actor_mapping。我编写了一个查询,从表电影和每部电影的 Actor 组中选择数据。但之后我添加了另外两个表movie_player_episode_mappingplayer,我必须修改我的查询来选择和分组可用于电影的季节。例如,如果表 movie_player_episode_mapping 包含 movie_id = 1 的第 1 季和第 2 季,我必须获取字符串 1,2

所以,我的表格:

CREATE TABLE `movie` (
  `movie_id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `rating` float(2,1) 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` (`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`)
) 

我的查询:

SELECT title, 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 = ma.actor_id
WHERE m.rating IS NOT NULL
GROUP BY m. movie_id
ORDER BY m.rating DESC;

另一个我的两个表:

CREATE TABLE `movie_player_episode_mapping` (
  `movie_id` int(11) UNSIGNED,
  `season` tinyint(11) UNSIGNED,
  `episode` tinyint(11) UNSIGNED,
  `player_id` tinyint(11) UNSIGNED,
  `path` TEXT
);

CREATE TABLE `player` (
  `player_id` int(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `hostname` VARCHAR(30),
  `name` VARCHAR(30),
  UNIQUE KEY `name` (`name`)
);

我尝试像这样修改我的查询:

SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons
    FROM movie m, movie_player_episode_mapping mpe
    INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id
    INNER JOIN actor a ON a.actor_id = ma.actor_id
    WHERE m.rating IS NOT NULL
    GROUP BY m. movie_id
    ORDER BY m.rating DESC;

但我遇到错误:[42S22][1054]“on Clause”中的未知列“m.movi​​e_id”

我也尝试了下一个查询,但结果错误。例如,如果我的 movie_player_episode_mapping 仅包含 1 个季节的 movie_id=1 行,则我得到 seasons: "1, 1, 1, 1, 1, 1, 1, 1, 1" 而不是 季节:“1”

SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons
FROM movie m
INNER JOIN movie_player_episode_mapping mpe ON m.movie_id = mpe.movie_id
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id
INNER JOIN actor a ON a.actor_id = ma.actor_id
WHERE m.rating IS NOT NULL
GROUP BY m. movie_id
ORDER BY m.rating DESC;

我的错误在哪里以及如何解决?

最佳答案

SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons
FROM movie m
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id
INNER JOIN actor a ON a.actor_id = ma.actor_id, movie_player_episode_mapping, mpe
WHERE m.rating IS NOT NULL
GROUP BY m. movie_id
ORDER BY m.rating DESC;

也许这可以帮助您...您上次的查询

关于mysql - 从两个 MySQL 表中选择时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074014/

相关文章:

mysql - SQL (MySQL) 与 NoSQL (CouchDB)

php - 我想创建一个表,但它给我错误 1046

mysql - PHPMyAdmin放入最新的数据库

mysql - FROM 子句中的表是否必须在 WHERE 子句中?

php - 导入数据库时​​出现utf8mb4_unicode_520_ci错误

Java JPA - 从在第二次运行时不起作用的实体创建表

php - 寻找在 Cron 上构建提要阅读器/聚合器的最佳实践

php - 将下拉列表中的值插入数据库

php - 防止多个 mysql 数据/表单提交并更新现有条目?

MySQL Workbench 导入限制