Foshvad
Guest
Выборка основной и дополнительной информации за один запрос
Необходимо за один запрос выбрать информацию из двух таблиц, связанных уникальным ключем. При этом, одной записи в первой таблице может соответствовать 0 или несколько записей во второй, а конкретизировать запрос надо по нескольким значениям из второй таблицы.
Например.
Есть Таблица пользователей (users) и таблица с дополнительной информацией о пользователях. (info)
Users:
id_user | login | pass
----------------------
1 | log1 | pas1
2 | log2 | pas2
3 | log3 | pas3
Info:
id_user | name | value
--------------------------
1 | icq | 12345678
1 | email | [email protected]
2 | tel | 223344
В результате выборки необходимо, чтоб в одной строке содержалась вся информация о пользователе.
Например:
id_user | login | pass | icq | email | tel
----------------------------------------------------------
1 | log1 | pas1 | 12345678 | [email protected] | NULL
2 | log2 | pas2 | NULL | NULL | 223344
3 | log3 | pas3 | NULL | NULL | NULL
Через JOIN к сожалению не получается
SELECT *
FROM users
LEFT JOIN info ON info.id_user = users.id_user
Выбирается:
id_user | login | pass | id_user | name | value
----------------------------------------------------
1 | log1 | pas1 | 1 | tel | 23423423
1 | log1 | pas2 | 1 | email | [email protected]
2 | log2 | pas2 | 2 | tel | 12345235
3 | log3 | pas3 | 3 | NULL | NULL
То есть информация по пользователям дублируется согласно таблицы info.
При этом возникает проблема с конкретизацией выборки по нескольким дополнительным параметрам (в данном случае, например, по выбору пользователей, у которых определенный email и tel)
Необходимо за один запрос выбрать информацию из двух таблиц, связанных уникальным ключем. При этом, одной записи в первой таблице может соответствовать 0 или несколько записей во второй, а конкретизировать запрос надо по нескольким значениям из второй таблицы.
Например.
Есть Таблица пользователей (users) и таблица с дополнительной информацией о пользователях. (info)
Users:
id_user | login | pass
----------------------
1 | log1 | pas1
2 | log2 | pas2
3 | log3 | pas3
Info:
id_user | name | value
--------------------------
1 | icq | 12345678
1 | email | [email protected]
2 | tel | 223344
В результате выборки необходимо, чтоб в одной строке содержалась вся информация о пользователе.
Например:
id_user | login | pass | icq | email | tel
----------------------------------------------------------
1 | log1 | pas1 | 12345678 | [email protected] | NULL
2 | log2 | pas2 | NULL | NULL | 223344
3 | log3 | pas3 | NULL | NULL | NULL
Через JOIN к сожалению не получается
SELECT *
FROM users
LEFT JOIN info ON info.id_user = users.id_user
Выбирается:
id_user | login | pass | id_user | name | value
----------------------------------------------------
1 | log1 | pas1 | 1 | tel | 23423423
1 | log1 | pas2 | 1 | email | [email protected]
2 | log2 | pas2 | 2 | tel | 12345235
3 | log3 | pas3 | 3 | NULL | NULL
То есть информация по пользователям дублируется согласно таблицы info.
При этом возникает проблема с конкретизацией выборки по нескольким дополнительным параметрам (в данном случае, например, по выбору пользователей, у которых определенный email и tel)