2016-04-13 7 views
0

これに沿ってSQLを構築したいが、sqluを使用しないでください。SQL用のスリック関数が存在する

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 existsまたはnot exists用がスリックの機能はありますか?私は再び私のスリックコードを再訪する際のおかげ

アップデート1

は、私は自分の過ちを実現しました。私が設定した誤ったアラームについてお詫びしたい。これは答えではなく、誰かが私の間違いを是正するために助けてくれることを願っています。当面は、SlickのプレーンなSQLを使用して作業を続けています。

私が構築したスリッククエリは機能しませんでした。それは私が望むSQLに近いものでした。私がやったことは、私はfilterNotはSQL not existsを生成しない気づく、

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")) 

ました。これが私を失った部分です。

+0

ご質問にサンプルデータが表示されていることをお勧めします。 –

+1

何を試しましたか?あなたはスリックがそれらをサポートしていないと思うのは何ですか?そして、http://stackoverflow.com/questions/18864351/scalatra-slick-and-insert-if-not-existsとhttps://groups.google.com/forum/#!topic/scalaquery/Ai8gzwMsKeg –

+0

inSetがありますスリックの演算子。それはあなたが欲しいものかどうかわからない – pedrorijo91

答えて

0

まだコメントするには十分な評判がありません。しかし、私はあなたが日付のテーブルで終了しないすべての行を取得すると仮定します。私は以下のようにクエリを書き換えます:

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を取る、あなたはLEFT JOIN datesで同じことを達成することができますし、WHERE条件に指定することを日付IS NULLの主キー(PK)。私は日付表のPKを知らないので、私が知っている列を追加するだけです。 PKの日付表に調整する必要があります。

LEFT JOIN ingとWHERE PK IS NULLは、行が左の結合テーブルに存在しないことを保証します。

+0

これは実際には質問に答えるものではありませんが、OPが必要なデータを取得するのに役立ちます。これはSlickに関する質問であり、クエリの書き換え方法に関するものではありません。 –

+0

真実、それは私が欲しいものではありませんが、SQLの存在を使わずに自分の問題を解決すればうまくいきます。問題はSQLの存在が私の問題を解決すると確信しているために発生します。私は間違っている可能性があります。 Btwの場合、左の結合の中の 'bk.e_oid = el.e_oid'は正しい結果を生成しません。私はそれが左の結合から外されるべきだと思う。私はまだそれらを試してみてください。 – thlim

関連する問題