从同一个表中双重选择

时间:2014-02-20 09:22:23

标签: mysql sql

我有一个类似于此的表类别。我的类别最多可以跨越4个级别,但我选择始终只显示选定的一个级别。

| id | parent_id | name | ... |
| 1  |    0      |  A   | ... |
| 2  |    1      |  A1  | ... |
| 3  |    2      |  A2  | ... |
| 4  |    1      |  A3  | ... |
| 5  |    0      |  B   | ... |

基本上我正在尝试选择父类别和他们的第一级孩子。因此,在选择之后,我应该从父母那里得到所有行parent_id = 0parent_id = parent_id

我应该得到:

| id | parent_id | name | ... |
| 1  |     0     |  A   | ... |
| 2  |     1     |  A1  | ... |
| 4  |     1     |  A2  | ... |
| 5  |     0     |  B   | ... |

我试过了:

SELECT * AS t1 FROM categories
    WHERE parent_id = 0 AND WHERE parent_id = t1.id;

我是SQL的新手,我可以使用PHP轻松完成这些代码,但我不想选择所有内容,然后执行复杂的排序功能。

如何选择表格一次以选择parent_id,然后在此选择中进行第二次选择我只是在其中我所做的选择中,来自类别表格中的parent_id与等号id相同。

2 个答案:

答案 0 :(得分:2)

这样的东西
SELECT  *
FROM    categories
WHERE   parent_id = 0 
UNION ALL
SELECT  c.* 
FROM    categories c INNER JOIN
        categories p    ON  c.parent_id = p.id
WHERE   p.parent_id = 0 

答案 1 :(得分:1)

您可以使用自联接来实现相同的目标,

SELECT *  FROM categories c1,
               categories c2 
          WHERE c1.parent_id = 0 
          AND c1.parent_id = c2.id