[英]Update mysql table based with group_concat
更新如下!
誰能幫幫我
我有一張桌子:
CREATE TABLE `group_c` (
`parent_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`child_id` int(11) DEFAULT NULL,
`number` int(11) DEFAULT NULL,
PRIMARY KEY (`parent_id`)
) ENGINE=InnoDB;
INSERT INTO group_c(parent_id,child_id)
VALUES (1,1),(2,2),(3,3),(4,1),(5,4),(6,4),(7,6),(8,1),(9,2),(10,1),(11,1),(12,1),(13,0);
我想將具有多個父母的每個孩子的數字字段更新為1:
SELECT group_concat(parent_id), count(*) as c FROM group_c group by child_id having c>1
結果:
GROUP_CONCAT(PARENT_ID) C
12,11,10,8,1,4 6
9,2 2
6,5 2
因此,所有具有parent_id 12,11,10,8,1,4,9,2,6,5的行都應更新為數字= 1
我已經嘗試過類似的東西:
UPDATE group_c SET number=1 WHERE FIND_IN_SET(parent_id, SELECT pid FROM (select group_concat(parent_id), count(*) as c FROM group_c group by child_id having c>1));
但這不起作用。
我怎樣才能做到這一點?
SQLFIDDLE: http ://sqlfiddle.com/#!2/acb75/5
[編輯]
我試圖簡化示例,但由於要按多個字段分組,因此實際情況要復雜一些。 這是一個新的小提琴: http ://sqlfiddle.com/#!2/ 7aed0/11
為什么要使用GROUP_CONCAT()
然后嘗試通過FIND_IN_SET()
對結果進行FIND_IN_SET()
? 這不是SQL打算的工作方式。 您可以使用簡單的JOIN
來檢索記錄:
SELECT
parent_id
FROM
group_c
INNER JOIN
(SELECT
child_id,
count(*) as c
FROM
group_c
group by
child_id
having c>1) AS childs
ON childs.child_id=group_c.child_id
-檢查修改后的演示 。 如果您想要UPDATE
,則只需使用:
UPDATE
group_c
INNER JOIN
(SELECT
child_id,
count(*) as c
FROM
group_c
group by
child_id
having c>1) AS childs
ON childs.child_id=group_c.child_id
SET
group_c.number=1
對於任何有興趣的人。 這就是我解決的方法。 這是兩個查詢,但在我看來,這並不是真正的問題。
UPDATE group_c INNER JOIN (
SELECT parent_id, count( * ) AS c
FROM `group_c`
GROUP BY child1,child2
HAVING c >1
) AS cc ON cc.parent_id = group_c.parent_id
SET group_c.number =1 WHERE number =0;
UPDATE group_c INNER JOIN group_c as gc ON
(gc.child1=group_c.child1 AND gc.child2=group_c.child2 AND gc.number=1)
SET group_c.number=1;
小提琴: http ://sqlfiddle.com/#!2/ 46d0b4/1/0
這是一個類似的解決方案...
UPDATE group_c a
JOIN
( SELECT DISTINCT x.child_id candidate
FROM group_c x
JOIN group_c y
ON y.child_id = x.child_id
AND y.parent_id < x.parent_id
) b
ON b.candidate = a.child_id
SET number = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.