0

我想使用 Squeryl 查询查找重叠数据。我可以通过使用这里找到的方法和普通 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;

编辑:更重要的是我需要能够动态地做到这一点。我有一个复杂的动态查询,我称之为可能依赖于传递的不同选项。如果定义了一个选项,那么它应该调用它,否则如果为空则禁止。但是 groupBy 不支持 inhibitorBy 方法。要查看我当前方法的完整说明,请查看此处

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 回答