У меня есть 2 таблицы:PostgreSQL - Как удалить дубликаты при выполнении LEFT OUTER JOIN с предложением WHERE?
users table
+--------+---------+
| id | integer |
+--------+---------+
| phone | string |
+--------+---------+
| active | boolean |
+--------+---------+
statuses table
+---------+---------+
| id | integer |
+---------+---------+
| user_id | integer |
+---------+---------+
| step_1 | boolean |
+---------+---------+
| step_2 | boolean |
+---------+---------+
Я делаю LEFT OUTER JOIN
statuses
стол на users
стол с WHERE
пункта, как это:
SELECT users.id, statuses.step_1, statuses.step_2
FROM users
LEFT OUTER JOIN statuses ON users.id = statuses.user_id
WHERE (users.active='f')
ORDER BY users.id DESC
Моя проблема
Есть некоторые пользователи, имеют тот же номер телефона внутри таблицы users
, и я хочу удалить дубликатов пользователей по телефону номер.
Я не хочу удалять их из базы данных. Но просто хотите исключить их только для этого запроса.
Например, John (ID: 1) и Sara (ID: 2) используют один и тот же номер телефона (+ 6012-3456789), удаляя один из них, Джон или Сара прекрасно подходят для меня.
Что я пробовал, но не работал?
Первое:
SELECT DISTINCT users.phone
FROM users
LEFT OUTER JOIN statuses ON users.id = statuses.user_id
WHERE (users.active='f')
ORDER BY users.id DESC
Второе:
SELECT users.phone, COUNT(*)
FROM users
LEFT OUTER JOIN statuses ON users.id = statuses.user_id
WHERE (users.active='f')
GROUP BY phone
HAVING COUNT(users.phone) > 1
Что вы подразумеваете под «Я хочу удалить один из них»? вы хотите удалить связанную таблицу строк строк? – scaisEdge
@scaisEdge не удалять, а просто хотят их исключить. –
Добавьте пример данных таблицы и ожидаемый результат. Помните, что SELECT DISTINCT применяется ко всем выбранным строкам. – jarlh