【问题标题】:How to SELECT from column WHERE we have multiple conditions in from another TABLE?如何从列中选择我们在另一个表中有多个条件?
【发布时间】:2020-09-08 08:00:11
【问题描述】:

我有 3 张桌子:

  1. movies,其中有 titleid
  2. stars,其中有 person_idmovie_id
  3. people,其中有 idname

我想编写一个 SQL 查询来列出约翰尼·德普和海伦娜·伯翰·卡特主演的所有电影的标题。

当我写查询时,我没有得到约翰尼·德普和海伦娜·伯翰·卡特主演的标题

SELECT title
FROM movies
WHERE id IN (   SELECT movie_id
                FROM people
                JOIN stars
                ON stars.person_id = people.id
                WHERE name = "Helena Bonham Carter" 
                OR name = "Johnny Depp"
            )
GROUP BY title;

【问题讨论】:

  • 您的代码不会在 SQL Server 中运行,除非您碰巧有名称类似于 "Johnny Depp" 的列。

标签: sql sql-server database


【解决方案1】:

你可以试试下面的-

SELECT title
FROM movies
WHERE id IN (   SELECT movie_id
                FROM people
                JOIN stars
                ON stars.person_id = people.id
                WHERE name in('Helena Bonham Carter' ,'Johnny Depp')
                group by movie_id
                having count(distinct name)=2
            )
GROUP BY title

【讨论】:

    【解决方案2】:

    在您的评论中,您说您想查看两个演员都存在的标题(使用 AND),但查询显示“OR” - 一个或第二个......所以也许只是逻辑操作数问题? 查询看起来不错,但尚未测试:)

    【讨论】:

      【解决方案3】:

      您也可以将您的问题表述为 “向我展示存在 'Johnny Depp' 和 'Helena Bonham Carter' 相关行的电影行”。这几乎可以按字面意思翻译成 SQL。

      SELECT title
      FROM movies
      WHERE EXISTS (  SELECT 'x'
                      FROM stars
                      JOIN people ON people.id = stars.person_id
                      WHERE stars.movie_id = movies.id
                        AND people.name = 'Helena Bonham Carter' )
        AND EXISTS (  SELECT 'x'
                      FROM stars
                      JOIN people ON people.id = stars.person_id
                      WHERE stars.movie_id = movies.id
                        AND people.name = 'Johnny Depp' );
      

      【讨论】:

      • @GordonLinoff 正确,我的坏习惯,更新答案(附加source)。
      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多