SQL 包含大量 LEFT JOINS 的查询
SQL query with a lot of LEFT JOINS
我正在尝试组合查询,但结果不是我所期望的,
select pii.id, pii.name, pii.sku, group_concat(pic.id) category_ids, group_concat(pimg.id) as modifier_group_ids
from items as pii
left join category_item as pici on pii.id = pici.item_id
left join categories as pic on pici.category_id = pic.id
left join item_modifier_group as piimg on pii.id = piimg.item_id
left join modifier_groups as pimg on piimg.modifier_group_id = pimg.id
where pii.account_id = 728
group by pii.id;
结果是这样的,第 4 列 (category_ids) 与重复值分组。
id |name |sku |category_ids |modifier_group_ids |
-------|----------------------------|----|------------------------|-------------------|
336937 |Chicken Pullets | |12981 | |
336938 |Hats | |12965 | |
336939 |Jack Fruit Taco Salad | |12975,12975,12975 |57,58,60 |
336940 |Vegatarian Taco Salad | |12975,12975,12975 |58,60,57 |
336941 |Pulled Pork Taco Salad | |12975,12975,12975 |58,57,60 |
336942 |Ground Beef Taco Salad | |12975,12975,12975 |60,57,58 |
336943 |Steak Taco Salad | |12975,12975,12975 |57,58,60 |
336944 |Chicken Taco Salad | |12975,12975,12975 |60,58,57 |
336945 |Jack Fruit Quesadilla | |12976,12976,12976,12976 |58,60,57,56 |
您的查询看起来不错,大部分重复项都与 JOIN
一起出现。尝试在 group_concat()
中使用 distinct
,如下所示。
group_concat(distinct pic.id) category_ids,
如果您不希望 group_concat()
连接重复值,则只需在函数中使用 distinct
关键字:
select pii.id, pii.name, pii.sku, group_concat(DISTINCT pic.id) category_ids, group_concat(pimg.id) as modifier_group_ids
from items as pii
left join category_item as pici on pii.id = pici.item_id
left join categories as pic on pici.category_id = pic.id
left join item_modifier_group as piimg on pii.id = piimg.item_id
left join modifier_groups as pimg on piimg.modifier_group_id = pimg.id
where pii.account_id = 728
group by pii.id;
我正在尝试组合查询,但结果不是我所期望的,
select pii.id, pii.name, pii.sku, group_concat(pic.id) category_ids, group_concat(pimg.id) as modifier_group_ids
from items as pii
left join category_item as pici on pii.id = pici.item_id
left join categories as pic on pici.category_id = pic.id
left join item_modifier_group as piimg on pii.id = piimg.item_id
left join modifier_groups as pimg on piimg.modifier_group_id = pimg.id
where pii.account_id = 728
group by pii.id;
结果是这样的,第 4 列 (category_ids) 与重复值分组。
id |name |sku |category_ids |modifier_group_ids |
-------|----------------------------|----|------------------------|-------------------|
336937 |Chicken Pullets | |12981 | |
336938 |Hats | |12965 | |
336939 |Jack Fruit Taco Salad | |12975,12975,12975 |57,58,60 |
336940 |Vegatarian Taco Salad | |12975,12975,12975 |58,60,57 |
336941 |Pulled Pork Taco Salad | |12975,12975,12975 |58,57,60 |
336942 |Ground Beef Taco Salad | |12975,12975,12975 |60,57,58 |
336943 |Steak Taco Salad | |12975,12975,12975 |57,58,60 |
336944 |Chicken Taco Salad | |12975,12975,12975 |60,58,57 |
336945 |Jack Fruit Quesadilla | |12976,12976,12976,12976 |58,60,57,56 |
您的查询看起来不错,大部分重复项都与 JOIN
一起出现。尝试在 group_concat()
中使用 distinct
,如下所示。
group_concat(distinct pic.id) category_ids,
如果您不希望 group_concat()
连接重复值,则只需在函数中使用 distinct
关键字:
select pii.id, pii.name, pii.sku, group_concat(DISTINCT pic.id) category_ids, group_concat(pimg.id) as modifier_group_ids
from items as pii
left join category_item as pici on pii.id = pici.item_id
left join categories as pic on pici.category_id = pic.id
left join item_modifier_group as piimg on pii.id = piimg.item_id
left join modifier_groups as pimg on piimg.modifier_group_id = pimg.id
where pii.account_id = 728
group by pii.id;