当前位置: 首页 > 面试题库 >

从NOT EXISTS转换为NOT IN

亢建木
2023-03-14
问题内容

我有三个表:

  • sailor (Name, grade);
  • boat (Name, color, grade);
  • reservation (sname,bname,Weekdays, start, end);

为了获得保留每艘红船的水手的清单,我有:

select s.sname from sailor s 
where not exists(  
    select * from boat b  
    where b.color = 'red'  
    and not exists (  
        select * from reservation r  
        where r.bname = b.bname  
        and r.sname = s.sname));

现在,我需要使用NOT IN而不是NOT EXISTS重写此查询。这是我到目前为止的内容:

select s.sname from sailor s
where s.sname not in (select s2.sname from sailor s2 where
    s2.sname not in (select r.sname from reservation r where r.bname not in (
            select b.bname from boat b where b.color <> 'red' )));

但是,这将返回已预订红船的所有水手的列表(不一定是全部)。我很难检查列表中的名称是否已保留每条船(我也不能使用COUNT())。

任何帮助表示赞赏


问题答案:

为了得到保留每条船的水手名单。我将使用此脚本

解决方案1:

 ;WITH k AS 
    (
    SELECT b.sname,COUNT(distinct a.bname) coun FROM boat a
    INNER JOIN reservation b 
        on a.bname = b.bname
    GROUP BY b.sname
    )
    SELECT k.sname FROM k WHERE coun = (select COUNT(*) FROM boat AS b)

解决方案2:

SELECT s.sname
FROM   sailor AS s
WHERE  s.sname NOT IN (SELECT DISTINCT a.sname
                       FROM   (SELECT s.sname,
                                      b.bname
                               FROM   sailor AS s
                                      CROSS JOIN boat AS b
                               WHERE  b.color = "Red") a
                       WHERE  a.sname + a.bname 
                                            NOT IN (SELECT r.sname + r.bname
                                                    FROM   reservation AS r
                                                    WHERE  r.sname IS NOT NULL
                                                            AND r.bname IS NOT NULL));


 类似资料:
  • 我有一个接口和枚举,如下所示: 现在,为了调用,我创建了一个包含所有元素的枚举集,因此执行以下操作:

  • 我如何将此代码从juqery转换为vuejs? 此处的Javascript测试:https://codepen.io/tidiosupport/pen/wnepeao

  • 到目前为止,我在这里找到了一些答案,但每次都会出现无法从对象转换为字符串的错误,等等。例如,我现在使用了这个想法: 我有以下与我的数据库映射的对象列表:

  • 然后输入LDA: 但是在Java API中,我使用以下代码获得了CountVectorizerModel: 像这样: 我使用的是Spark和MLlib 1.5.1以及Java8 任何帮助都是非常感谢的。谢谢,当我试图从DataFrame转换为JavaPairRDD时,这里是异常日志文件

  • 问题内容: 我想知道是否有任何方法可以将Integer类型的变量转换为BigInteger。我尝试类型转换Integer变量,但出现一个错误消息,指出不可转换的类型。 问题答案: 您想要的方法是BigInteger#valueOf(long val) 。 例如, 首先创建String是不必要的,也是不希望的。

  • 问题内容: 我正在使用Jongo与Mongo一起工作,当我执行查询时会收到结果。 问题是,如果json是content ,它将不是from的唯一方法。 我如何获得原件? 我没有要映射的地图,也不是创建类的解决方案,这就是为什么我使用 问题答案: 如果您可以访问某些JSON库,那似乎就是这样。 如果使用org.json库,请使用: 如果是Gson,请使用@hellboy提到的方法:

  • 问题内容: 我当前的数据 是 我已经尝试了所有四个查询,但都没有工作。(参考) 全部抛出语法错误,如下所示: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’)AS INT FROM PRODUCT LIMIT 0,30’附近使用正确的语法 您的SQL语法有误;在第1行的“ INTEGER)FROM PRODUCT LIMIT 0,30”附近检查与您的MySQL服务器

  • 问题内容: 我正在尝试从从mysql数据库获取数据的php文件对div进行简单的ajax更新。一个函数填充div,另一个函数将消息添加到数据库,并在单击提交按钮时调用。我想知道是否有人可以在jQuery中给我他们的同等学历。以下是原型版本。 问题答案: 在jQuery的阿贾克斯()调用,所有这一切。它具有较少参数的包装器,例如.get()、. post()和.load(),您可以使用这些包装器来减