есть 3 таблицы, клиенты, пользователи (клиентов) и права (пользователей)
у клиента несколько пользователей, у пользователя несколько прав, одно из прав "администратор"
необходимо найти всех клиентов и их администраторов
http://sqlfiddle.com/#!9/c06ed6/1/0
чисто теоретически, а можно ли этот запрос написать так, чтоб в join небыло join и без subselect?
у клиента несколько пользователей, у пользователя несколько прав, одно из прав "администратор"
Код:
mysql> select * from Customers;
+----+-------------+
| id | name |
+----+-------------+
| 1 | DB |
| 2 | BVG |
| 3 | Burger King |
+----+-------------+
3 rows in set (0,00 sec)
mysql> select * from Users;
+----+-------------+-----------+
| id | customer_id | nick |
+----+-------------+-----------+
| 1 | 1 | DB_Admin |
| 2 | 1 | DB_User |
| 3 | 2 | BVG_Admin |
| 4 | 2 | BVG_User |
+----+-------------+-----------+
4 rows in set (0,00 sec)
mysql> select * from Permissions;
+----+---------+------------+
| id | user_id | permission |
+----+---------+------------+
| 1 | 1 | admin |
| 2 | 2 | other |
| 3 | 3 | admin |
| 4 | 4 | other |
+----+---------+------------+
4 rows in set (0,00 sec)
необходимо найти всех клиентов и их администраторов
Код:
mysql> select c.name as customer, u.nick as administrator
-> from Customers c
-> left join (
-> Users u join Permissions p on
-> u.id = p.user_id and p.permission = 'admin'
-> ) on u.customer_id = c.id;
+-------------+---------------+
| customer | administrator |
+-------------+---------------+
| DB | DB_Admin |
| BVG | BVG_Admin |
| Burger King | NULL |
+-------------+---------------+
3 rows in set (0,00 sec)
чисто теоретически, а можно ли этот запрос написать так, чтоб в join небыло join и без subselect?