sqlite—为什么sql认为我的列名不明确?

axkjgtzd  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(365)

我正在学习sql(lite3),在其中一个练习中,我需要检查imdb数据库中johnny depp和helena bonham carter主演的电影。
我得出了以下结论:

  1. SELECT title
  2. FROM movies
  3. WHERE movies.id IN (SELECT movies.id
  4. FROM movies
  5. JOIN stars ON movies.id = stars.movie_id
  6. JOIN people ON people.id = stars.person_id
  7. WHERE name = "Jhonny Depp")
  8. AND movies.id IN (SELECT movies.id
  9. FROM movies
  10. JOIN stars ON movies.id = stars.movie_id
  11. JOIN people ON people.id = stars.person_id
  12. WHERE name = "Helena Bonham Carter");

控制台正在返回
错误:靠近第1行:不明确的列名:id .schema 显示

  1. CREATE TABLE movies
  2. (
  3. id INTEGER,
  4. title TEXT NOT NULL,
  5. year NUMERIC,
  6. PRIMARY KEY(id)
  7. );
  8. CREATE TABLE stars
  9. (
  10. movie_id INTEGER NOT NULL,
  11. person_id INTEGER NOT NULL,
  12. FOREIGN KEY(movie_id) REFERENCES movies(id),
  13. FOREIGN KEY(person_id) REFERENCES people(id)
  14. );
  15. CREATE TABLE directors
  16. (
  17. movie_id INTEGER NOT NULL,
  18. person_id INTEGER NOT NULL,
  19. FOREIGN KEY(movie_id) REFERENCES movies(id),
  20. FOREIGN KEY(person_id) REFERENCES people(id)
  21. );
  22. CREATE TABLE ratings
  23. (
  24. movie_id INTEGER NOT NULL,
  25. rating REAL NOT NULL,
  26. votes INTEGER NOT NULL,
  27. FOREIGN KEY(movie_id) REFERENCES movies(id)
  28. );
  29. CREATE TABLE people
  30. (
  31. id INTEGER,
  32. name TEXT NOT NULL,
  33. birth NUMERIC,
  34. PRIMARY KEY(id)
  35. );

我不明白为什么它模棱两可。如果你能含糊其辞地把我推向正确的方向,我将不胜感激。提前谢谢!

km0tfn4u

km0tfn4u1#

在主选择中有一个别名。

  1. SELECT m.title FROM movies as m
  2. WHERE movies.id IN
  3. (
  4. SELECT movies.id FROM movies
  5. JOIN stars ON movies.id = stars.movie_id
  6. JOIN people ON people.id = stars.person_id
  7. WHERE name = "Jhonny Depp"
  8. )
  9. AND movies.id IN
  10. (
  11. SELECT movies.id FROM movies
  12. JOIN stars ON movies.id = stars.movie_id
  13. JOIN people ON people.id = stars.person_id
  14. WHERE name = "Helena Bonham Carter"
  15. );
hsvhsicv

hsvhsicv2#

嗯。我看不出有什么问题 id . 我看到一个问题 name . 另外,你不需要 movies 在子查询中。所以,你的目标似乎是:

  1. SELECT m.title
  2. FROM movies m
  3. WHERE m.id IN (SELECT s.movie_id
  4. FROM stars s JOIN
  5. people p
  6. ON p.id = s.person_id
  7. WHERE p.name = 'Jhonny Depp'
  8. ) AND
  9. m.id IN (SELECT s.movie_id
  10. FROM stars s JOIN
  11. people p
  12. ON p.id = s.person_id
  13. WHERE p.name = 'Helena Bonham Carter'
  14. );

如果您限定了所有列引用,则不应获得不明确的列引用。请注意表别名的使用。

展开查看全部

相关问题