Выбор строк, совпадающих на основе значения другой строки

#sql #rows

Вопрос:

Вам нужна небольшая помощь с SQL — запросом, пожалуйста. У меня есть таблица, похожая на приведенную ниже:

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

По сути, я хочу получить все строки, в которых uprn отличается, но лицензия одинакова. Таким образом, в приведенном выше примере я вернул бы только первые 2 строки, так как водительские права будут совпадать, но uprn этого не делает.

У меня нет существующего запроса, которым я мог бы поделиться, так как я не знаю, как это сделать, и я не собирался находить что-либо полезное в Интернете.

Комментарии:

1. пожалуйста, покажите желаемый результат, например

2. Вы хотите, чтобы uprn был таким же или другим? У вас есть противоречивые утверждения в вашем вопросе

3. Спасибо, я обновил вопрос. Я хочу попасть в первые два ряда

Ответ №1:

Мои знания 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)
 

Ответ №2:

Я думаю, что это проблема 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
 

Комментарии:

1. Спасибо за вашу помощь в этом, но, к сожалению, это не дает мне никаких результатов. Если я закомментирую группу по частям, я получу результаты, но есть дубликаты.

2. вы можете попробовать внутри sql шаг за шагом. сначала попробуйте сгруппироваться по uprn. тогда попробуй outer.by путь. какую базу данных вы использовали.