我在汽车行业工作。我们有一张带有产品成分的产品表。

这是我们一个产品的树状视图。产品的一部分通过组装操作制造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/

10-11 01:39