Select in a mysql table with self-join relationship
Select in a mysql table with self-join relationship
我不太熟悉自连接关系,但我想知道是否可以执行 SELECT,以显示与引用产品直接相关的其他产品的产品,在这个tablemysql
示例数据:
期望的输出:
我尝试了几个查询,但我只得到一个包含列表的字段,例如,行本身的相关产品:
select p1.idP, p1.name, group_concat(p2.idP)
from prodotti p1
left join prodotti p2 on p1.idP = p2.prodotti_idP
group by p1.idP;
我想只在 "parent" 产品
的正下方显示与其他人关联的记录
谢谢
您可以在不使用任何 "Self Join" 的情况下执行此操作。使用 CASE .. WHEN
表达式的条件 ORDER BY
会起作用。如果prodotti_idP
是null
,基本就说明是母品。所以我们可以简单地按它的 idP
值排序;否则我们将使用其父 ID (prodotti_idP
) 进行排序。必须对 idP
值进行二级排序。
select idP, name, prodotti_idP
from prodotti
order by
case when prodotti_idP is null then idP
else prodotti_idp
end,
idP
SQL Fiddle 演示: http://sqlfiddle.com/#!9/72ffbcf/6
我不太熟悉自连接关系,但我想知道是否可以执行 SELECT,以显示与引用产品直接相关的其他产品的产品,在这个tablemysql
示例数据:
期望的输出:
我尝试了几个查询,但我只得到一个包含列表的字段,例如,行本身的相关产品:
select p1.idP, p1.name, group_concat(p2.idP)
from prodotti p1
left join prodotti p2 on p1.idP = p2.prodotti_idP
group by p1.idP;
我想只在 "parent" 产品
的正下方显示与其他人关联的记录谢谢
您可以在不使用任何 "Self Join" 的情况下执行此操作。使用 CASE .. WHEN
表达式的条件 ORDER BY
会起作用。如果prodotti_idP
是null
,基本就说明是母品。所以我们可以简单地按它的 idP
值排序;否则我们将使用其父 ID (prodotti_idP
) 进行排序。必须对 idP
值进行二级排序。
select idP, name, prodotti_idP
from prodotti
order by
case when prodotti_idP is null then idP
else prodotti_idp
end,
idP
SQL Fiddle 演示: http://sqlfiddle.com/#!9/72ffbcf/6