Я пытаюсь создать представление в 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 ответ
Вы ищете 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
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.
SEPARATOR
не является обязательным.separator
не является обязательным, но помогает вам выбрать другой символ в качестве разделителя.