我正在努力实现以下说我有一张桌子:
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,如果它们存在的话。
答案 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
编辑:如果您还要获取产品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