【问题标题】:Selecting rows with multiple condition across rows跨行选择具有多个条件的行
【发布时间】:2020-10-26 20:49:10
【问题描述】:

我有一张这样的桌子:

MovieID PersonID
1       1
1       2
1       3
1       4
2       6
2       1 
etc.

如何选择 personID 为 1 和 2 的人同时出现的所有电影 ID(不同的)?

我尝试过类似的方法:

(SELECT movie_id
 FROM stars
 WHERE person_id = (SELECT XXX)
 AND person_id = (SELECT XXX)
)

但显然它不起作用,因为每一行只有 1 个 person_id。

【问题讨论】:

    标签: sql select concatenation where-clause


    【解决方案1】:

    我只会使用聚合:

    select t.movie_id
    from t
    where t.person_id in (1, 2)
    group by t.movie_id
    having count(*) = 2;
    

    【讨论】:

    • 我没有硬编码 1 和 2 (这只是一个例子),所以我需要稍后选择它们。那我该怎么办呢?它不允许我用逗号写IN(SELECT id FROM people WHERE..., SELECT id FROM people WHERE...)
    • @Sabie 。 . .您必须以某种方式将它们传递给查询。您的问题表明它们是常数。您可能想问一个新的问题,更好地解释他们是如何选择的。
    • 它们是根据后续条件(特别是根据名称)选择的。为了简单起见,我只是在这里展示了它,但它们不应该是硬编码的。
    • @Sabie 。 . .问 new 问题,更好地描述如何选择这些值。此问题具有硬编码值,这回答了您提出的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2017-06-05
    • 1970-01-01
    • 2020-03-17
    • 2020-01-31
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多