我有以下表格(不相关的列省略了):

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

我有“工作室”和“设备”。工作室属于用户。设备可分配给工作室(工作室设备表)。一个设备可以多次分配给一个工作室,但也可以有工作室还没有设备。
我想为某个用户检索所有的工作室以及所有可能分配给这些工作室的设备。如果一个设备已经分配给一个工作室,那么也展示这个。
对于上面的示例,这意味着以下内容(对于用户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'

但这并不能得到我想要的所有数据。例如,检索studio 2,但不与所有可能的设备配对。
提前谢谢你的帮助!

最佳答案

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 ;

关于mysql - SQL n:m关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18658599/

10-12 04:59