Я пытаюсь создать представление в MySQL, объединив 2 таблицы следующим образом:

Таблица Пользователи :

+----+------+  
| id | name |
+----+------+
| 1  | Joy  |
+----+------+
| 2  | Roy  |
+----+------+
| 3  | Tony |
+----+------+  

Таблица Навыки :

+---------+---------+------------+
| auto_id | user_id | skill      |
+---------+---------+------------+
| 1       | 1       | PHP        |
+---------+---------+------------+
| 2       | 1       | CSS        |
+---------+---------+------------+
| 3       | 2       | Ruby       |
+---------+---------+------------+
| 4       | 2       | Javascript |
+---------+---------+------------+  

Здесь user_id в таблице Навыки - это Внешний ключ для id в таблице Пользователи .

Запрос на создание представления:

CREATE OR REPLACE VIEW user_view AS SELECT u.id, u.name,  GROUP_CONCAT(s.skill) as 
skills FROM users u, skills s WHERE u.id = s.user_id GROUP BY u.id  

Теперь проблема в том, что созданное представление имеет только 2 строки, я знаю это, потому что в таблице навыков нет значения для user_id 3 . Теперь я хочу, чтобы все 3 строки с навыком Тони имели значение Null , например:

+---------+------+-----------------+
| user_id | name | skills          |
+---------+------+-----------------+
| 1       | Joy  | PHP,CSS         |
+---------+------+-----------------+
| 2       | Roy  | Ruby,Javascript |
+---------+------+-----------------+
| 3       | Tony | Null or empty   |
+---------+------+-----------------+
1
Shihas 8 Янв 2017 в 08:58

1 ответ

Лучший ответ

Вы ищете Left join:

CREATE OR REPLACE VIEW user_view AS
    SELECT 
        u.id,
        u.name,
        GROUP_CONCAT(s.skill) AS skills
    FROM
        users u
            LEFT JOIN
        skills s ON u.id = s.user_id
    GROUP BY u.id
3
Gurwinder Singh 8 Янв 2017 в 09:03
Спасибо, работает :). Это потому, что я не использую LEFT JOIN ? И еще я думаю, что SEPARATOR не является обязательным.
 – 
Shihas
8 Янв 2017 в 09:13
1
Да, ваше соединение было внутренним, и да, предложение separator не является обязательным, но помогает вам выбрать другой символ в качестве разделителя.
 – 
Gurwinder Singh
8 Янв 2017 в 09:15
Конечно .. Извините за опоздание с голосованием: P. Я сам тестировал этот код в соответствии со своими требованиями. Спасибо.
 – 
Shihas
8 Янв 2017 в 09:34