[英]mysql group_concat with where in condition
我有三桌產品
ID name
1 A
2 B
3 C
供應商
ID Name
1 V1
2 V2
3 V3
product_vendor
ID pid vid
1 1 1
2 1 2
3 2 3
4 3 1
5 3 2
6 3 3
我想離開聯接並創建如下表所示的響應
p_id product vendors
1 A V1,V2
2 B V3
3 C V1,V2,V3
下面是我的解決方案,但它很復雜。 是否可以對此進行簡短查詢
SELECT GROUP_CONCAT(v2.`name`) AS vendername,
p.*,
GROUP_CONCAT(v.`v_id`) AS vi
FROM `products` p
JOIN `product_vendor` v ON p.id = v.p_id,
`vendors` v2
WHERE v2.id IN
(SELECT GROUP_CONCAT(p.`id`) AS vi
FROM `vendors` p
JOIN `product_vendor` v ON p.id = v.p_id
GROUP BY p.id)
GROUP BY p.id
ORDER BY `p_id` ASC
您可以嘗試一下嗎,我沒有執行查詢,但認為它會有所幫助:
SELECT `P`.`id`, `P`.`name`, CONCAT(GROUP_CONCAT(CAST(`V`.`name` AS CHAR)), ", ") as vendername
FROM `product` P
JOIN `product_vendor` PV ON (`PV`.`pid` = `P`.`id`)
JOIN `vendor` V ON (`V`.`ID` = `PV`.`vid`)
GROUP BY `PV`.`pid`
要列出產品表中的所有記錄,請使用:
SELECT `P`.`id`, `P`.`name`, CONCAT(GROUP_CONCAT(CAST(`V`.`name` AS CHAR)), ", ") as vendername
FROM `product` P
LEFT JOIN `product_vendor` PV ON (`PV`.`pid` = `P`.`id`)
LEFT JOIN `vendor` V ON (`V`.`ID` = `PV`.`vid`)
GROUP BY `PV`.`pid`
ORDER BY `P`.`id`
只需使用joins和group_concat
無需子查詢
SELECT
p.id,
p.name,
Group_concat(v.name) AS vendername
FROM
product p
JOIN
product_vendor pv ON p.id = pv.pid
JOIN
vendor v ON pv.vid = v.id
GROUP BY
p.id, p.name
ORDER BY
p.id ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.