У меня есть две таблицы, одна из которых является пользователями, а другая - связанными программами через отношение многие ко многим через таблицу user_programs.
mysql> select * from users;
+----+----------+
| id | name |
+----+----------+
| 1 | Jonathan |
| 2 | Little |
| 3 | Annie |
| 4 | Bob |
+----+----------+
4 rows in set (0.00 sec)
mysql> select * from programs;
+-----+----------------------+
| id | name |
+-----+----------------------+
| 10 | Microsoft Word |
| 20 | Microsoft Excel |
| 30 | Microsoft PowerPoint |
+-----+----------------------+
3 rows in set (0.00 sec)
mysql> select * from link;
+---------+------------+
| user_id | program_id |
+---------+------------+
| 1 | 20 |
| 1 | 30 |
| 2 | 20 |
| 3 | 10 |
+---------+------------+
5 rows in set (0.00 sec)
Я понимаю, как объединить таблицы и вернуть результат этот тип, фильтрующий только пользовательские программы 1 - Джонатан:
mysql>
select users.name, programs.program from user_programs
join users on users.id = user_programs.user_id
left join programs on programs.id = user_programs.program_id
where users.id = 1;
+----------+----------------------+
| name | name |
+----------+----------------------+
| Jonathan | Microsoft Excel |
| Jonathan | Microsoft PowerPoint |
+----------+----------------------+
, но мне действительно нужно принести не только программы Джонатана, но и программы, которых у него еще нет.
Как показано ниже:
+----------+----------------------+
| name | name |
+----------+----------------------+
| Jonathan | Microsoft Excel |
| Jonathan | Microsoft PowerPoint |
| | Microsoft Word |
+----------+----------------------+
Я получил много объединений, но не смог. Кто-нибудь знает как это сделать? спасибо