У меня есть две таблицы:
db_contacts
Phone | Name | Last_Name
--------------------
111 | Foo | Foo
222 | Bar | Bar
333 | John | Smith
444 | Tomy | Smith
users_contacts
User_ID | Phone
--------------------
1 | 123
1 | 111
2 | 222
2 | 333
3 | 111
3 | 333
4 | 444
УведомлениеИсходя из вышесказанного:
- Пользователь с идентификатором 2 - единственный пользователь с номером телефона 222
- Пользователь с идентификатором 4 - единственный, имеющий номер телефона 444.
Мне нужно получить эти результаты с помощью запроса MySQL.
Другими словами: как выбрать всех пользователей, имеющих уникальный номер телефона, при условии, что этот номер существует вthe db_contacts.
Мне нужно, чтобы мой конечный результат был примерно таким:
User_ID | Phone | Name | Last_Name
------------------------------------
2 | 222 | Bar | Bar
4 | 444 | Tomy | Smith
PS: между столбцами телефона нет внешнего ключа, поскольку пользователь может иметьтелефон, которого нет в db_contacts.
В реальной жизни db_contacts содержит около 1 миллиона записей, а users_contacts около 5 миллионов записей.
То, что я попробовал, не получилось и взялмного времени для выполнения:
SELECT *
FROM users_contacts
WHERE users_contacts.phone IN (
SELECT users_contacts.phone
FROM `users_contacts`
JOIN db_contacts ON db_contacts.phone = users_contacts.phone
GROUP BY users_contacts.phone
HAVING COUNT(users_contacts.phone) = 1
)
Обновление:
Спасибо за ваш повторПожалуйста, я предоставил свое решение, которое идеально подходит для моего случая.