根据另一个行值选择匹配的行

时间:2021-06-16 09:50:57

标签: sql rows

请在 SQL 查询方面寻求一些帮助。我有一个类似于下面的表格:

id  |   uprn           |   driverlicence      |
===============================================
1   |   100000000420   |   FARME100165AB5EW   |
2   |   100000011420   |   FARME100165AB5EW   |
3   |   100000022420   |   GARME100165AB5EW   |
4   |   100000033420   |   HARME100165AB5EW   |

本质上我想要做的是获取所有 uprn 不同的行,但驱动程序是相同的。所以在上面的例子中,我只会取回前 2 行,因为驱动程序会匹配,但 uprn 不会。

我没有可以分享的现有查询,因为我不知道如何解决这个问题,而且我还没有从网络搜索中找到任何有用的信息。

2 个答案:

答案 0 :(得分:0)

我的 SQL 知识有点生疏,但这应该可以:

SELECT a.id, a.uprn, a.driverlicence
FROM mytable a
JOIN mytable b BY a.driverlicence == b.driverlicence
WHERE a.uprn != b.uprn

或者替代

SELECT *
FROM mytable
WHERE EXISTS(
    SELECT * 
    FROM mytable other 
    WHERE uprn != other.uprn AND driverlicence == other.driverlicence)

答案 1 :(得分:0)

我认为这是一个 X-Y 问题。你可以试试这个 sql。如果你有其他需要,请给我评论。

select uprn,driverlicence from t1 where driverlicence in 
(
    -- select duplicate driverlicence
    select driverlicence from t1 where uprn in 
        -- remove duplicate uprn
        (select uprn from t1 group by uprn having count(*)<2)
    group by driverlicence having count(*)>1
)
     uprn     |  driverlicence
--------------+------------------
 100000000420 | FARME100165AB5EW
 100000011420 | FARME100165AB5EW