【问题标题】:Get one single record when existing duplicates现有重复项时获取一条记录
【发布时间】:2015-09-24 05:28:18
【问题描述】:

我有一个这个表格的成分翻译表(为简单起见,删除了一些列,但结果中仍然需要)

| id | name         | ingredient_id | language |
|  1 | Water        |            11 |       en |
|  2 | Bell pepper  |            12 |       en |
|  3 | Sweet pepper |            12 |       en |

我正在尝试构建一个查询来检索每个成分的一个单一成分翻译,就像这样(预期结果)

| id | name         | ingredient_id |
|  1 | Water        |            11 |
|  2 | Bell pepper  |            12 |

到目前为止,我正在尝试使用此查询来完成此操作

select it1.*
from ingredient_translations it1 
  left outer join ingredient_translations it2 
    on  it1.ingredient_id = it2.ingredient_id
    and it1.id < it2.id 
where it1.language = 'es'

但它现在给出了预期的结果:/

flag

我正在使用 postgresql,虽然我尝试使用连接来执行此操作,因此我可以使用跨数据库 (Postgresql - MySQL) 解决方案。

拜托,任何见解都将不胜感激!!! :D

【问题讨论】:

  • mysql / sql-server ?
  • 我正在使用 postgresql,尽管我尝试使用连接来执行此操作,因此我可以使用跨数据库(postgresql - mysql)解决方案。

标签: mysql sql postgresql


【解决方案1】:
WITH CustomerCTE (
  SELECT t1.*,ROW_NUMBER() OVER (PARTITION BY ingredient_id ORDER BY id DESC) AS RN
  FROM ingredient_translations  t1
  INNER JOIN ingredient_translations   t2 ON t1.ingredient_id  = t2.ingredient_id  
  )

SELECT * FROM CustomerCTE WHERE RN = 1
ORDER BY id;

【讨论】:

    【解决方案2】:

    使用ROW_NUMBER() 而不是partition

    查询

    select id,name,ingredient_id,language from 
    (
        select id,name,ingredient_id,language,
        row_number() over
        (
            partition by ingredient_id
            order by id
        ) rn
        from tbl_Name
    )t
    where t.rn < 2;
    

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2017-05-08
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多