MYSQL - 在给定父ID的情况下,在一列中检索所有子ID

时间:2014-10-22 10:11:28

标签: mysql

我正在努力实现以下说我有一张桌子:

products_id    products_master
--------------------------------
1                    0
2                    0
3                    0
4                    2
5                    2
6                    2
7                    3
8                    3

然后我希望能够在选择包含其所有子项的父行时返回一列,这样当我从products_id = 2中选择其他列时

我想要以下结果:

products_id     products_master    simples_skus
---------------------------------------------------------------------------------
2                     0              4,5,6

我希望这是有道理的!如果您需要进一步说明,请询问!这是在MYSQL:)

编辑:我收到的第一个答案让我意识到了一些额外的答案。

我应该提到我希望这个工作没有我指定我追求的ID。例如,我选择所有具有主0的产品(意味着它们本身就是主产品),并且我试图获得主产品的子ID,如果它们存在的话。

2 个答案:

答案 0 :(得分:2)

在澄清之后,您的SQL查询是:

SELECT t1.products_id, t1.products_master, group_concat(t2.products_id) AS simple_skus
FROM table t1 INNER JOIN table t2 ON t1.products_id = t2.products_master
WHERE t1.products_id = 2
GROUP BY t1.products_master

说明:你需要使用你的表两次:  1. t2一次(group_concat())  2.一次(t1)用于表达您的选择(t1.products_id = 2

答案 1 :(得分:0)

使用如下表格:

Create table bla( 
  products_id    int,
  products_master int,
  x int,
  y int
  );

和样本值:

insert into bla  VALUES (1,0,8,9);
insert into bla VALUES  (2,0,9,10);
insert into bla  VALUES (3,0,10,11);
insert into bla VALUES  (4,2,11,12);
insert into bla VALUES  (5,2,12,13);
insert into bla VALUES  (6,2,13,14);
insert into bla VALUES  (7,3,14,15);
insert into bla VALUES  (8,3,16,16);

你想要的SQL是:

 SELECT masterbla.products_id,masterbla.products_master,masterbla.x,masterbla.y, group_concat(minorbla.products_id)
 FROM bla AS masterbla INNER JOIN bla AS minorbla ON masterbla.products_id=minorbla.products_master
 WHERE masterbla.products_master=0
 GROUP BY masterbla.products_id

SQL FIDDLE

编辑:如果您还要获取产品ID为'1'的条目(没有次要条目的主条目),请改用此条目:

SELECT masterbla.products_id,masterbla.products_master,masterbla.x,masterbla.y, group_concat(minorbla.products_id)
FROM bla AS masterbla LEFT JOIN bla AS minorbla ON masterbla.products_id=minorbla.products_master
WHERE masterbla.products_master=0
GROUP BY masterbla.products_id