SQL的光滑功能存在

时间:2016-04-13 04:42:43

标签: sql scala slick

我想在此构建一个SQL,但尽量不要使用sqlu。

 select el.oid, el.name, el.res_cat from el
    left join bk on (el.cat = bk.cat and bk.oid=100)
 where not exists (select 1 from dates bd where
     el.oid=bd.lots_oid and bd.bk_oid = bk.oid) and el.e_oid=bk.e_oid

是否有针对SQL existsnot exists的光滑功能?感谢

更新1

当我再次访问我的Slick代码时,我意识到了自己的错误。我想为我设置的误报道歉。这不是一个答案,希望有人可以帮助我纠正我的错误。目前,我正在使用Slick的纯SQL来继续我的工作。

我构建的Slick查询没有用。它接近我想要的SQL。我做的是,

val elQuery = elTable.joinLeft(bkTable)
  .on((el, bk) => el.cat === bk.cat && bk.oid === 100)

val query = for {
  a <- elQuery if bdTable.filterNot(bd => a._2.map(_.oid === bd.bkOid).isDefined && a._1.oid ===  bd.elOid).exists
} yield a

finalQuery.result.statements.foreach(x => Logger.debug(s"xx => $x"))

我注意到filterNot没有生成SQL not exists。这是失去我的另一部分。

1 个答案:

答案 0 :(得分:0)

我还没有足够的声誉来发表评论。但我假设你想获得所有不在日期表中退出的行。我会像下面一样重写你的查询:

Java version

说明: 您可以通过Application settings实现相同的操作,而不是set "JAVA_HOME=D:\Program Files\Java\jdk1.8.0_73" ,并在SELECT el.oid, el.name, el.res_cat.cat FROM el LEFT JOIN bk ON bk.cat = el.cat AND bk.e_oid = el.e_oid AND bk.oid = 100 LEFT JOIN dates bd ON bd.lots_oid = el.oid AND bd.bk_oid = bk.oid WHERE bd.lots_oid IS NULL 条件上指定日期NOT EXISTS的主键(PK)。我不知道日期表的PK,所以我只想添加我知道的列。您应该将其调整为日期表的PK。

LEFT JOIN datesWHERE可确保您在左连接表格中不存在该行。