首页 > 解决方案 > SQL - 在使用 AND 的选择中使用两个或多个条件

问题描述

根据两个条件,我无法获得我想要的数据,我有这个数据库:

Theatre(t_name, city, sinceYear);
Actor(a_id, a_name, birthYear, city);
Play(p_id, title, playwright, director, year);
Role(a_id, p_id, role, t_name);

Theatre:
Abima|tel aviv|1/1/1960
Miskan|beer sheba|20/2/1970
Akamri|haifa|15/3/1989

Actor:
204458952|Dani|22/1/1993|sderot
221354875|Osher|23/8/1995|beer sheba
251445841|Avi|5/12/1998|haifa
304226152|Noa|12/5/1992|tel avia
304804123|Shir|10/6/1990|beer sheba

Play:
111|Meri lo|Lior|Hanoh levin|2010
222|Tov agmad|Asaf|Nisim Aloni|2016
333|Songs|Ami|Hanoh levin|2018
444|Run it|Sami|Nisim Aloni|2010

Role:
304804123|111|meri|Abima
304226152|111|sonia|Abima
251445841|222|tov tov|Miskan
204458952|222|gamad |Abima
221354875|333|prince|Akamri
304804123|222|princes|Abima

我想接收所有出现在 Hanoh levin Play 而没有出现在 Nisim Aloni Play 中的演员(在目前的情况下,除了来自 shir.

我尝试这样做:

  SELECT a_id, a_name FROM (
     Select * FROM Actor JOIN Play, Role ON Actor.a_id=Role.a_id AND 
     Role.p_id=Play.p_id WHERE  
        director='Hanoh levin') AND NOT EXISTS (
          Select * FROM Actor JOIN Play, Role ON Actor.a_id=Role.a_id AND 
             Role.p_id=Play.p_id WHERE  
                director='Nisim Aloni'); 

我得到一个错误,或者如果我稍微改变一下,我什么也得不到。根据数据库,我不应该接受女演员 Shir,因为她出现在两位导演的戏剧中。我做错了什么?

谢谢

标签: sql

解决方案


您可以将以下查询与连接一起使用:

select a_name
  from Actor a
  join Role r on r.a_id = a.a_id
  join Play p on p.p_id = r.p_id 
 where exists ( select 1 from Play where director = 'Hanoh levin' and p_id = p.p_id )
   and not exists ( select 1 from Play where director = 'Nisim Aloni' and p_id = p.p_id );

A_NAME
------
Shir
Noa
Osher

Demo


推荐阅读