Ama*_*man 1 mysql sql database
我试图提取类型不是“科幻”的电影的信息。但是我收到了一个错误,#1242 - Subquery returns more than 1 row我无法解决这个问题。我正在使用此查询:SELECT * FROM film WHERE id != (SELECT id FROM genre WHERE type='Sci-Fi');获取结果。我想我必须修复该id !=区域,但我不知道检查电影的当前 id 是否存在于返回的 id 行中的命令。请帮我解决一下这个。另外我是新手,SQL所以如果我当前的数据库不适合这个特定任务,请在下面发表评论。
IF THERE IS BETTER WAY TO STORE genres OF INDIVIDUAL FILMS, PLEASE LET ME KNOW.
TABLE (with rows): film:
TABLE (with rows): genre:
我强烈建议使用not exists而不是not in. 这是有充分理由的。如果子查询返回的任何值为NULL,则not in过滤掉所有行。这种行为与 的含义是一致的NULL,但却是高度反直觉的。
所以我建议:
SELECT f.*
FROM film f
WHERE NOT EXISTS (SELECT 1
FROM genre g
WHERE g.id = f.id
);
Run Code Online (Sandbox Code Playgroud)
您还询问您的数据结构。您应该有三个表:
films,每片一行有一filmId列genres,每个流派(例如“科幻”)一行和一genreId列。filmGenres,每部电影每种类型一行(带有filmId和genreId列)。第三个表称为联结表或关联表。
你应该写:
SELECT * FROM film WHERE id not in (SELECT id FROM genre WHERE type='Sci-Fi');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |