内连接查询n:m

时间:2015-10-09 03:42:17

标签: mysql join

好的,我有表niveles,categoria和niveles_has_categoria

idcategoria | categoria

1 |子

2 |青少年

3 |成人

idNivelCat | niveles_idniveles | categoria_idcategoria

1 | 1 | 3

2 | 3 | 2

3 | 3 | 1

4 | 3 | 3

5 | 2 | 3

第三个表是另一个表的关系n:m,所以我试图通过两个表的id得到其他数据,这是我的查询

SELECT n.nombre_nivel, c.categoria FROM niveles n, categoria c WHERE n.idniveles in (SELECT n.idniveles FROM niveles n INNER JOIN niveles_has_categoria nc ON n.idniveles=nc.niveles_idniveles ) 

AND c.idcategoria in (SELECT c.idcategoria FROM categoria c INNER JOIN niveles_has_categoria nca ON c.idcategoria=nca.categoria_idcategoria)

但是它显示了这样的事情:

nombre_nivel | categoria

等级1 |儿童

等级1 |青少年

等级1 |成人

2级|孩子

2级|青少年

等级2 |成人

3级|孩子

等级3 |青少年

等级3 |成人

什么时候应该是这样的:

nombre_nivel | categoria

等级1 |成人

等级3 |青少年

3级|孩子

等级3 |成人

等级2 |成人

如果有人能提供帮助就会很棒!!

1 个答案:

答案 0 :(得分:0)

尝试:

Select n.nombre_nivel, c.categoria from niveles_has_categoria nc 
      inner join niveles n on nc.niveles_idniveles = n.idniveles
      inner join categoria c on nc.categoria_idcategoria = c.idcategoria

我们的想法是从具有您需要的结构的表开始,然后只在每个步骤中添加属于该记录的条目。