【问题标题】:Squeryl Select DuplicatesSqueryl 选择重复项
【发布时间】:2013-06-25 02:48:03
【问题描述】:

我想使用 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;

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

【问题讨论】:

    标签: sql scala squeryl


    【解决方案1】:

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

    【讨论】:

    • 我不久前也偶然发现了这一点,但我刚刚意识到我的问题没有提供足够的细节。我还需要能够禁止整个检查。问题更新了更多细节。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多