我有以下表格(省略了无关的列):
studios:
id | user_id
1 | 1
2 | 1
equipment:
id
1
2
studio_equipment:
id | studio_id | equipment_id
1 | 1 | 1
2 | 1 | 1
我有“工作室”和“设备”。工作室属于用户。设备可以分配到工作室(studio_equipment表)。设备可以多次分配到工作室,但也可以有没有设备的工作室。
我想为特定用户检索所有工作室以及可以分配给这些工作室的所有可能设备。如果设备已经分配给工作室,那么也要显示它。
对于上面的例子,这意味着以下(对于user_id 1):
desired results:
studio.id | equipment.id | studio_equipment.id
1 | 1 | 1
1 | 1 | 2
1 | 2 | null
2 | 1 | null
2 | 2 | null
到目前为止,这是我的SQL语句:
SELECT `s`.*, `e`.*, `se`.*
FROM (`studios` AS s)
LEFT JOIN `studio_equipment` AS se ON `s`.`id`=`se`.`studio_id`
LEFT OUTER JOIN `equipment` AS e ON `se`.`equipment_id`=`e`.`id`
WHERE `s`.`user_id` = '1'
但这并不能检索我想要的所有数据。例如,工作室2被检索但未与所有可能的设备配对。
提前感谢您的帮助!
答案 0 :(得分:1)
SELECT
s.id AS studio_id,
e.id AS equipment_id,
se.id AS studio_equipment_id
FROM
studios AS s
CROSS JOIN
equipment AS e
LEFT JOIN
studio_equipment AS se
ON se.studio_id = s.id
AND se.equipment_id = e.id ;