Postgresql:两列相同但第三列不同,显示行

时间:2015-06-20 09:56:18

标签: postgresql

我有4列id,名字,姓氏,引用。大多数时候引用是相同的但我需要显示每个具有相同名称的行,但在postgresql中显示不同的引用并按ID号对它们进行排序。仅适用于某人有多个引用的行。我尝试了很多东西但是弄得一团糟。请协助。 例如: -

20 / John / Smith / 675  
21 / John / Smith / 675  
22 / John / Smith / 676  
22 / Joe  / Bloggs/ 651  
24 / Joe  / Bloggs/ 651  
25 / John / Smith / 674  

应该返回所有John Smith行,因为他的一个或多个引用是不相似的

20 / John / Smith / 675  
21 / John / Smith / 675  
22 / John / Smith / 676  
25 / John / Smith / 674  

我可以使用它来计算,但我想显示完整的行

    select firstname, lastname, count (distinct id)
    from transfer
    group by firstname, lastname
    having count(distinct id) >= 2

2 个答案:

答案 0 :(得分:1)

这是一个可能的答案:

select id, firstname, lastname, reference
from transfer t1
where 1 < (select count(distinct reference) 
           from transfer t2
           where t1.firstname = t2.firstname and t1.lastname = t2.lastname)

答案 1 :(得分:1)

您无需计算,您只需要检查(至少)是否存在同一个人reference的不同值的一条记录:

SELECT *
FROM transfer t
WHERE EXISTS (
  SELECT * FROM transfer x
  WHERE x.firstname = t.firstname     -- same name
    AND x.lastname = t.lastname
    AND x. reference <> t.reference   -- different reference
  );