0

Squeryl クエリで重複データを見つけたいです。通常の SQL でここにあるメソッドを使用してこれを行うことができますが、Squeryl を使用して行う方法がわかりません。

基本的に、Non-Distinct 行を検索するこの行を Squeryl に変換する必要があります

SELECT * 
FROM myTable L1 
JOIN(
  SELECT myField1,myField2 
  FROM myTable 
  GROUP BY myField1,myField2 
  HAVING COUNT(*) >= 2
) L2 
ON L1.myField1 = L2.myField1 AND L1.myField2 = L2.myField2;

編集:さらに重要なことに、これを動的に実行できる必要があります。渡されるさまざまなオプションに依存する可能性のある、少し複雑な動的クエリを呼び出します。Option が定義されている場合は、これを呼び出す必要があります。それ以外の場合は、null の場合は禁止します。ただし、groupBy は、inhibitBy メソッドをサポートしていません。私の現在の方法の完全な説明を見るには、ここを見てください

def getAllJoined(
  hasFallback:Option[String] = None
  showDuplicates:Option[String] = None):List[(Type1,Type2)] = transaction{
  join(mainTable,
    table2,
    table3,
    table3,
    table4.leftOuter,
    table4.leftOuter,
    table5,
    table6)((main, attr1, attr2, attr3, attr4, attr5, attr6, attr7) =>
    where(
      main.fallBack.isNotNull.inhibitWhen(!hasFallback.isDefined)
    )
    //What to do here to only find duplicates when showDuplicates.isDefined? AKA Non-Distinct
    select(main,attr1,attr2,attr3,attr4,attr5,attr6,attr7)
    on(
      (main.attr1Col === attr1.id) ,
      (main.attr2Col === attr2.id) ,
      (main.attr3Col === attr3.id) ,
      (main.attr4Col === attr4.map(_.id)) ,
      (main.attr5Col === attr5.map(_.id)) ,
      (main.attr6Col === attr6.id) ,
      (main.attr7Col === attr7.id)
      )
  ).toList
4

1 に答える 1

1

Google グループのこのディスカッションをご覧ください。彼らは 2011 年に禁止された所有に関連するバグを修正したように見えますが、なぜそれがあなたのケースに残っているのかわかりません. また、同じスレッドで having 句を使用したクエリの例もあります。

于 2013-06-24T18:31:18.610 に答える