我在汽车行业工作。我们有一张带有产品成分的产品表。
这是我们一个产品的树状视图。产品的一部分通过组装操作制造E40。
这是我们的MySQL数据库的表视图:
我们希望获得产品所有组件的结果。像这样:
'E40-1','E40-2','E40-3','E40-4','E40-5','E40-6','E40-6-1'
'E40-6-2'
因此结果的长度必须为8。
我已经尝试了一些MySQL查询,但是它们不起作用。
我尝试过的查询:
select alt_bilesen from urunler_seviyeler where parcano in (select parcano from urunler_seviyeler where parcano="E40")
这仅给我们产品的六个部分。没有E40-6-1和E40-6-2。
我也尝试过:
select alt_bilesen from urunler_seviyeler where parcano in (select alt_bilesen from urunler_seviyeler where parcano="E40")
这只会给我们产品的最低部分。 E40-6-1和E40-6-2。没有其他部分。
顺便说一下,我们可以使用Python。如果我们想使用Python,我认为我们必须使用一些for循环,while循环等来调用它。您能给我一个建议吗?谢谢。
最佳答案
MySQL不支持“分层”查询。使用多个查询可以将该功能仿真到有限数量的级别。查询的结果可以与UNION ALL操作结合使用。
获取特定顺序返回的行可能会出现问题,具体取决于您需要返回的实际条件。
第一级:
SELECT t1.alt_bilesen
FROM urunler_seviyeler t1
WHERE t1.parcano = 'E40'
第二级:
SELECT t2.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2
ON t2.parcano = t1.alt_bilesen
WHERE t1.parcano = 'E40'
第三级:
SELECT t3.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2 ON t2.parcano = t1.alt_bilesen
JOIN urunler_seviyeler t3 ON t3.parcano = t2.alt_bilesen
WHERE t1.parcano = 'E40'
第四级:
SELECT t4.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2 ON t2.parcano = t1.alt_bilesen
JOIN urunler_seviyeler t3 ON t3.parcano = t2.alt_bilesen
JOIN urunler_seviyeler t4 ON t4.parcano = t3.alt_bilesen
WHERE t1.parcano = 'E40'
可以将查询与
UNION ALL
集运算符组合( SELECT t1.alt_bilesen
FROM urunler_seviyeler t1
WHERE t1.parcano = 'E40'
)
UNION ALL
( SELECT t2.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2
ON t2.parcano = t1.alt_bilesen
WHERE t1.parcano = 'E40'
)
UNION ALL
( SELECT t3.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2 ON t2.parcano = t1.alt_bilesen
JOIN urunler_seviyeler t3 ON t3.parcano = t2.alt_bilesen
WHERE t1.parcano = 'E40'
)
UNION ALL
( SELECT t4.alt_bilesen
FROM urunler_seviyeler t1
JOIN urunler_seviyeler t2 ON t2.parcano = t1.alt_bilesen
JOIN urunler_seviyeler t3 ON t3.parcano = t2.alt_bilesen
JOIN urunler_seviyeler t4 ON t4.parcano = t3.alt_bilesen
WHERE t1.parcano = 'E40'
)
ORDER BY 1
通过在每个查询中包含文字值,可以包括附加的“级别”列。要按返回列以外的其他顺序进行排序,您需要在每个查询中包括一些其他表达式...
关于python - MySQL选择产品的所有组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28267563/