mysql - 内连接查询 n :m

标签 mysql join

好的,我有表 niveles、categoria 和 niveles_has_categoria

idcategoria|类别

1| child

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|类别

一级| child

一级|青少年

一级|成人

2 级| child

2 级|青少年

2 级|成人

3级| child

3 级|青少年

3级|成人

什么时候应该是这样的:

nombre_nivel|类别

一级|成人

3 级|青少年

3级| child

3级|成人

2 级|成人

如果有人能帮忙就太好了!!

最佳答案

尝试:

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

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

关于mysql - 内连接查询 n :m,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029551/

相关文章:

javascript - 无法复制变量内的内容

MySQL - 从与第一个表匹配的第二个表中选择最后一条记录

sql - 当另一个字段已经在 GROUP BY 中时,WHERE 大于计数的 SQL 查询

mysql - 五个表均来自第一个表,如果存在,则将其他表与第五个表中的最大值连接起来

php - MySQL查询以获取列与同一列的AVG之间的差异之和

c# - 您可以截断 GridView 中数据绑定(bind)模板字段的结果吗?

sql - 如何进行 JOIN 查询而不忽略具有 NULL 值的记录?

MySQL 连接、最近的、分组依据、每个 id 限制为 1 个结果

php - 从同一个表中获取值

mysql - 除了使用子查询执行检查约束之外,还有其他选择吗?