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