【问题标题】:Can I use distinct on two fields in Korma?我可以在 Korma 的两个字段上使用 distinct 吗?
【发布时间】:2015-03-18 13:03:36
【问题描述】:

我有一个包含四个字段的表:abcd

我想要这样的查询:

select distinct a, b from t;

文档建议类似

(k/select my-table
          (k/modifier "DISTINCT")
          (k/fields :a :b))

但是生成的SQL是这样的:

SELECT distinct a, b, c, d FROM my_table;

我想要的是:

SELECT distinct a, b FROM my_table;

如何将 distinct 修饰符限制为仅两个字段?

尝试使用不同的修饰符值(例如DISTINCT (a, b))会导致 SQL 查询错误。

这是一个完整的例子:

(k/defentity my-table (k/entity-fields :a :b :c :d))

(k/sql-only (k/select my-table (k/fields :a :b)
                               (k/modifier "DISTINCT")))

"SELECT DISTINCT `my-table`.`a`,
                 `my-table`.`b`,
                 `my-table`.`c`,
                 `my-table`.`d`,
                 `my-table`.`a`,
                 `my-table`.`b` FROM `my-table`"

【问题讨论】:

    标签: korma


    【解决方案1】:

    SQL 关键字DISTINCT 在大多数(全部?)数据库中对整个列进行操作,包括 MySQL 和 SQL Server。因此,至少在那些数据库中,无法在字段子集上使用DISTINCT

    一个不同的查询,可能像SQL - 'DISTINCT' based on only some columns? 中建议的那样,可能会得到你所需要的。

    【讨论】:

    • 我不想在返回字段的子集上有所区别。我将在我的问题中添加我想要的实际 SQL,如果不清楚,抱歉。
    • 啊,有道理。当您删除 distinct 修饰符时,它会生成正确的查询吗?您查询的是什么数据库引擎?
    • MySQL。您可以从上面的查询中看到重复的 ab。我认为这是一个错误/功能,在这里讨论:github.com/korma/Korma/issues/251
    • 是的,你是对的。在模型上定义列后,Korma 总是返回所有列。
    猜你喜欢
    • 2020-12-04
    • 2021-12-07
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多