Mysql根据另一个select的结果选择

时间:2014-06-26 20:29:06

标签: mysql

我知道这可以使用脚本语言来完成,但是根据我的要求进行一次SQL调用会很棒。我需要选择所有类别和产品的父类别

说我有这两张桌子。

TABLE 1:categories
|| category || categoryid ||
===========================
|| fightercraft      || 5    

|| spaceship    || 10  

|| ships   || 3   

TABLE 2:catrelationships
category || parentcategory
===========================
5  ||  10

10  || 3 

3   || 

我的限制是我只能将一个参数传递给第一个表类别的查询。我知道我有一个战斗机类别,我需要将父类别全部放在一个列中。

Select categories.category,catrelationships.category from categories 
JOIN categories on catrelationships.category=categories.id
where categories.id=5

需要以某种方式返回!

RESULT
|| product     || category 

|| fightercraft || 5

|| spaceship  || 10

|| ships  || 3  

有人能引导我朝着正确的方向前进吗?

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但如果您愿意承担嵌套类别深度的限制,以下内容应该符合您的要求:

SELECT p.product
     , c2.product AS category
  FROM products p
  JOIN (
        SELECT c1.category AS c1
             , c1.parentcategory AS c2
             , c2.parentcategory AS c3
             , c3.parentcategory AS c4
          FROM categories c1
     LEFT JOIN categories c2 ON c1.parentcategory = c2.category
     LEFT JOIN categories c3 ON c2.parentcategory = c3.category
        ) c ON p.category = c.c1
   JOIN categories c2 ON c2.category IN (c.c1, c.c2, c.c3, c.c4)
  ORDER BY p.product ASC, c2.category DESC;

上述查询假设最大嵌套深度为4个类别。您可以根据需要调整深度。

SQL Fiddle