Mysql查询有很多对很多

时间:2018-02-06 21:23:49

标签: mysql

我有使用evento_institucion与Instituciones(多对多)相关的Eventos表。

eventos       instituciones      evento_institucion
-------       -------------      ------------------
id            id                 id
name          name               evento_id
                                 institucion_id

Eventos与inscripciones表(一对多)相关

inscripciones
-------------
id
evento_id
code

现在,我需要一个列出inscripciones表的SQL查询,但我需要知道eventos.name以及与eventos相关的instituciones.name列表。

2 个答案:

答案 0 :(得分:0)

如果您要查找的查询按照' inscripciones'返回单行,并带有以下列:

  • eventos.name
  • (inscripciones的任何专栏)
  • 包含instituciones.names列表的单个列

然后我假设最后一个(名单)给你带来的麻烦。这可以使用MySQL的GROUP_CONCAT函数来完成。

类似以下内容可能有效:

SELECT inscripciones.id, inscripciones.code, eventos.name, GROUP_CONCAT(instituciones.name SEPARATOR ', ')
FROM inscripciones, eventos, evento_institucion, instituciones
WHERE inscripciones.evento_id = eventos.id
  AND eventos.id = evento_institucion.evento_id
  AND evento_institucion.institucion_id = instituciones.id
GROUP BY inscripciones.id;

答案 1 :(得分:0)

这应该适合你:

select i.*, ev.name, ins.name 
from inscripciones i
join evento_institucion ei on i.evento_id = ei.evento_id
join eventos e on ei.evento_id = e.id
join instituciones ins on ei.institucion_id = ins.id