簡體   English   中英

為另一列中的條件查找一列中的所有值

[英]Find all the values in a column for a condition in other column

我有一個名為female的 SQL 視圖,如下所示

+----------+----------+--------+------+
| actor_id | movie_id | gender | year |
+----------+----------+--------+------+
|   528787 |   2      | M      | 1996 |
|   528788 |   2      | F      | 1952 |
|   528789 |   1      | M      | 2001 |
|   528790 |   3      | M      | 1994 |
|   528791 |   2      | F      | 2000 |
|   528791 |   3      | F      | 2004 |
|   528791 |   4      | F      | 2000 |
|   528791 |   5      | F      | 2001 |
|   528792 |   4      | F      | 1999 |
|   528792 |   6      | F      | 2000 |
+----------+----------+--------+------+

...等等

這里的actor_idmovie_id形成了唯一的組合。 我需要找到只有女演員工作的所有movie_id 這意味着我需要排除所有只有男性或男女演員都工作的電影。

預期輸出

+----------+----------+--------+------+
| actor_id | movie_id | gender | year |
+----------+----------+--------+------+
|   528791 |   4      | F      | 2000 |
|   528791 |   5      | F      | 2001 |
|   528792 |   4      | F      | 1999 |
|   528792 |   6      | F      | 2000 |
+----------+----------+--------+------+

請幫助我了解解決方案以及對此的可能查詢。

對不起,如果這對你們中的一些人來說太明顯了。

給出的答案不正確,因為我編寫了一個 python 代碼來交叉驗證這些值,並且我得到了18927計數。

NOT EXISTS在腦海中:

select f.*
from female f
where not exists (select 1
                  from female f2
                  where f2.movie_id = f.movie_id and f2.gender = 'M'
                 );

如果你只想要電影而不是原始行,那么我會使用聚合:

select movie_id
from female f
group by movie_id
having min(gender) = max(gender) and min(gender) = 'F';

您可以嘗試如下

SELECT * 
FROM   [female] 
WHERE  movie_id IN (SELECT movie_id 
                    FROM   [female] 
                    GROUP  BY movie_id 
                    HAVING Max(gender) = Min(gender) 
                           AND Max(gender) = 'F') 

如果視圖中有重復項,並且您不希望重復項出現在輸出中,則可以嘗試如下操作。

 SELECT distinct actor_id , movie_id , gender , year  
    FROM   [female] 
    WHERE  movie_id IN (SELECT movie_id 
                        FROM   [female] 
                        GROUP  BY movie_id 
                        HAVING Max(gender) = Min(gender) 
                               AND Max(gender) = 'F') 

在性別“M”上使用 Not IN:

SELECT * FROM `test_data` 
where movie_id 
NOT IN (SELECT movie_id from test_data where gender = 'M')

嘗試這個

SELECT *
FROM female
WHERE gender='F'
AND movieId NOT IN (SELECT movieId FROM female WHERE gender='M');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM