Выберите строки, в которых несколько значений в одном столбце соответствуют одному значению в другом - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть таблица с идентификатором пользователя, адресом и почтовым индексом.Для каждого идентификатора пользователя может быть несколько записей (в нем хранятся все их предыдущие адреса и почтовые индексы), но возникла проблема, когда адреса были обновлены, а почтовые индексы - нет.Мне нужно найти все идентификаторы пользователей, для которых для данного пользователя адрес изменился, но почтовый индекс не был обновлен.

+----+---------+----------+
| ID | Address | Postcode |
+----+---------+----------+
|  1 | Town A  | abcde2   |
|  1 | Town B  | abcde2   |
|  3 | Town B  | defgh6   |
|  3 | Town B  | defgh6   |
|  4 | Town C  | ijklm7   |
|  5 | Town A  | ijklm7   |
|  5 | Town C  | abcde2   |
+----+---------+----------+

Выходные данные должны быть:

+----+---------+----------+
| ID | Address | Postcode |
+----+---------+----------+
|  1 | Town A  | abcde2   |
|  1 | Town B  | abcde2   |
+----+---------+----------+

или простотолько идентификаторы.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы ищете записи, имеющие такие же id и postcode, но с другим address.

Вы можете достичь этого с помощью простого JOIN, который определяет вышеуказанные условия в ON предложение.

SELECT 
    t1.id, 
    t1.address,
    t1.postcode
FROM 
    table t1
    INNER JOIN table t2 
        ON  t2.id       = t1.id
        AND t2.postcode = t1.postcode
        AND t1.address  <> t2.address 
;

Обратите внимание, что, как представляется, проблема в ожидаемых данных: согласно предоставленной вами спецификации, для идентификатора 5 ...

не должно отображаться никаких записей.
0 голосов
/ 19 декабря 2018

Я думаю, что следующий код решит вашу проблему:

SELECT A.ID, A.ADDRESS, A.POSTCODE FROM 
TABLE A
JOIN TABLE B ON A.ID=B.ID AND A.ADDRESS=B.ADDRESS AND A.POSTCODE<>B.POSTCODE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...