【问题标题】:Postgres Return just the first occurrence based on a not unique columnPostgres 基于非唯一列仅返回第一次出现
【发布时间】:2017-02-08 19:13:20
【问题描述】:

我知道这个问题已经被问过好几次了,但似乎没有一个解决方案适合我。我正在使用 node-postgres 从具有大量重复数据的数据库中获取数据。 这是我正在使用的查询,但它仍然返回重复项:

var queryText = 'SELECT distinct on(kodartikulli)  grupi, kodifikimartikulli2, pershkrimartikulli FROM products WHERE kodartikulli IN (' + params.join(',') + ')';

这是结果:

[ 匿名的 { grupi: 'Syze Dielli', kodifikimartikulli2: '极地', pershkrimartikulli: 'POLAR 556 03' } ] [ 匿名的 { grupi: 'Syze Dielli', kodifikimartikulli2: '极地', pershkrimartikulli: 'POLAR 556 03' }, 匿名的 { grupi: 'Syze Dielli', kodifikimartikulli2: '极地', pershkrimartikulli: 'POLAR 558 01' } ]

如您所见,前两个结果是相同的。我只想退回其中一个,然后像这样继续第二个:

[ 匿名的 { grupi: 'Syze Dielli', kodifikimartikulli2: '极地', pershkrimartikulli: 'POLAR 556 03' } ], 匿名的 { grupi: 'Syze Dielli', kodifikimartikulli2: '极地', pershkrimartikulli: 'POLAR 558 01' } ]

【问题讨论】:

  • 我的代码有错误。现在它正在按应有的方式显示数据。给您带来的不便,我们深表歉意。

标签: sql node.js postgresql


【解决方案1】:

您正在选择具有不同 kodartikulli 的记录。您应该向我们展示您的源数据,但 2 条记录的 kodartikulli 肯定是不同的,这就是提取它们的原因。

【讨论】:

    【解决方案2】:

    你错过了ORDER BY

    SELECT distinct on(kodartikulli) grupi, kodifikimartikulli2, pershkrimartikulli
    FROM products
    WHERE kodartikulli IN (' + params.join(',') + ')' + '
    ORDER BY kodartikulli;
    

    这将为每个 kodartikulli 返回任意行。通常,有一个额外的键来指定要返回的行。

    【讨论】:

    • 不应该是GROUP BY吗?
    • @joop 。 . .没有。对于distinct on,您想使用ORDER BY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多