Выборка и объединение двух таблиц, с переносом совпадающих значений одной из таблиц, из строки в столбец результата

Есть две таблицы.

    users:
    
    | id        |     user       |     email          |
    | --------- | -------------- | ------------------ |
    | 1300      | user_nick      | [email protected] |
    | 1301      | user_tom       | [email protected]  |
    | 1302      | user_anna      | [email protected] |
    
    values:
    
    | field_id  |     user_id    |     value      |
    | --------- | -------------- | -------------- |
    | 1         | 1300           | Nick           |
    | 3         | 1300           | New York       |
    | 5         | 1300           | 555 555 55     |
    | 1         | 1301           | Tom            |
    | 3         | 1301           | Utha           |
    | 5         | 1301           | 555 555 66     |
    

Если я делаю запрос:

SELECT u.id, u.user, u.email, v.value FROM users u, values v WHERE v.user_id = 1300 AND u.id = 1300 AND (v.field_id = 1 OR v.field_id = 5);
                    
                    

закономерно возвращается такой результат:

    | id        |     user       |     email          |     value      |
    | --------- | -------------- | ------------------ | -------------- |
    | 1300      | user_nick      | [email protected] | Nick           |
    | 1300      | user_nick      | [email protected] | 555 555 55     |
    

Понятно, что его можно разобрать, и получить требуемую структуру... но интересно, а возможно ли создать один запрос, который вернёт, требуемую структуру? А именно:

    | id        |     user       |     email          |     1          |     5          |
    | --------- | -------------- | ------------------ | -------------- | -------------- |
    | 1300      | user_nick      | [email protected] | Nick           | 555 555 55     |
    

То-есть, чтобы первые ячейки строк из таблицы values преобразовались в дополнительные столбцы в результате запроса? Точно помню, что когда-то давно в визуальном редакторе запросов MS Aссess, что-то подобное делал, но сейчас дело имею с MySQL, и никак не могу сформировать запрос, и сформулировать поиск в гугле, чтобы найти подходящие примеры. Спасибо!


Ответы (1 шт):

Автор решения: taravasya_github

Наткнулся на собственный вопрос, и решил отписаться о готовом решении:

SELECT
    id,
    user,
    email,
    username,
    v1.value Nickname1,
    v2.value Phone5
FROM users u
    LEFT JOIN values v1 on v1.item_id = u.id AND v1.field_id = 1
    LEFT JOIN values v2 on v2.item_id = u.id AND v2.field_id = 5
GROUP BY u.id
id user email Nickname1 Phone5
1300 user_nick [email protected] Nick 555 555 55
1301 user_tom [email protected] Tom 555 555 66
1302 user_anna [email protected] NULL NULL
→ Ссылка