Squeryl Select Duplicates

时间:2013-06-24 18:24:16

标签: sql scala squeryl

我想找到与Squeryl查询重叠的数据。我可以通过使用找到here的方法和普通的SQL来实现,但无法弄清楚如何使用Squeryl。

基本上我需要将找到非特殊行的这一行转换为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方法。要查看我当前方法的完整说明look here

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

1 个答案:

答案 0 :(得分:1)

查看有关Google网上论坛的this讨论。看起来他们在2011年修复了与禁止相关的错误,但不确定为什么它仍然存在于你的情况下。他们还在同一个线程中使用having子句进行示例查询。