【问题标题】:How I can use SQL to create a new table using WHERE/AND conditions?如何使用 SQL 使用 WHERE/AND 条件创建新表?
【发布时间】:2020-08-30 05:03:48
【问题描述】:

我需要创建一个新表,其中包含 Johnny Depp 和 Helena Bonham Caster 主演的电影的标题。 我有这些表: 电影:(ID、标题和年份) 星星:(Movie_ID,Person_ID) 人:(ID、姓名和出生年份)

CREATE TABLE johnny_helena (title TEXT);
INSERT INTO johnny_helena (title)
SELECT title
FROM movies
WHERE id IN (SELECT movie_id FROM stars WHERE person_id IN (SELECT id FROM people WHERE name = 'Johnny Depp') AND person_id IN (SELECT id FROM people WHERE name = 'Helena Bonham Caster'))

当我执行此代码时,我收到一个包含 0 行但应该是 6 行的表。 我是新的 em SQL,我相信我犯了一个愚蠢的错误。那么,我该如何解决这个错误呢? 谢谢。

【问题讨论】:

  • 请添加输入数据、预期结果和标签数据库
  • 为什么有这么多内部查询?为什么不做一个简单的JOIN
  • 当你问我添加de输入数据是指我正在处理的数据库?而且我没有使用JOIN,因为我昨天真的开始学习SQL,所以我需要学习很多东西。

标签: sql join group-by sql-insert create-table


【解决方案1】:

一个选项使用连接和聚合:

INSERT INTO johnny_helena (title)
SELECT m.title
FROM movies m
INNER JOIN stars s ON s.movie_id = m.id
INNER JOIN people p ON p.id = s.person_id
WHERE p.name in ('Johnny Depp', 'Helena Bonham Caster')
GROUP BY m.id, m.title
HAVING COUNT(*) = 2

【讨论】:

  • 字母“S”和“ON”之前的字母“P”是什么意思?当我看到 s.movi​​e_id 我明白这意味着 stars.movi​​e_id 或 p.name 意味着 people.name 但是当“S”或“P”单独时我不明白。再次感谢!
  • @Daniel-Araujo:这些是表别名。通常,from movies m 表示m 是查询其余部分中表movies 的快捷方式。
  • 好的,我明白了。我很感谢您的帮助,但它仍然不起作用:(。我收到了一张 0 行的表格。
  • @Daniel-Araujo:这表明没有两个演员一起出现的电影。您能否使用示例数据设置db<>fiddle,以便我们实际测试查询?
  • 不幸的是,我不知道 dbfiddle 是如何工作的。如果你能简单解释一下,或者我可以在 google 或 youtube 上搜索。如果您愿意,我还可以将包含我在此问题中使用的数据库的文件发送给您。或其他最适合您的方式。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多