如何使用分组依据选项更新此列
how can I update this column with an group by option
我有一个table这样的
title ACCNR ID
Hello1 1 1
Hello1 1 2
Hello1 3
Hello1 4
Hello2 3 5
Hello2 3 6
Hello2 7
Hello2 8
现在我想为相同的标题填充缺失的 ACCNR。
编辑:结果应为:
title ACCNR ID
Hello1 1 1
Hello1 1 2
Hello1 **1** 3
Hello1 **1** 4
Hello2 3 5
Hello2 3 6
Hello2 **3** 7
Hello2 **3** 8
我试过这个:
update refs join refs as p set refs.accnr =
IF (
SELECT GROUP_CONCAT(DISTINCT refs.accnr order by accnr))
from refs
where refs.id = p.id and refs.accnr <> '' GROUP BY refs.title
IS NULL ' ',c1) where p.id=refs.id;
原因是,我得到了这个错误
[Err] 1048 - Column 'custom_1' cannot be null
第一次尝试:
update refs join refs as p set refs.custom_1 =
(
SELECT GROUP_CONCAT(DISTINCT refs.accnr order by accnr)
from refs
where refs.id = p.id and refs.accnr <> '' GROUP BY refs.title
) where p.id=refs.id;
是什么让我错了?
如果有任何建议,我将不胜感激。
编辑:此方法使用第二个 table:
drop table if EXISTS accnr;
create table accnr (SELECT GROUP_CONCAT(DISTINCT refs.accnr order
by accnr) as accnr, concat(',',GROUP_CONCAT(refs.id order by
refs.id),',') as idlist from refs
where refs.accnr <> '' GROUP BY refs.titel,);
update refs join accnr set custom_1 = accnr.accnr where refs.id like concat('%,',refs.id,',%');
您可以通过在 UPDATE
语句中利用 sql 别名以高效的方式做到这一点:
UPDATE
tab
SET
tab.ACCNR = (
SELECT
t.ACCNR
FROM
tab t
WHERE
t.title = tab.title
LIMIT 1
)
WHERE
tab.ACCNR IS NULL
如果我理解正确的话,你只需要用与第一行相同的值更新列 accnr
。
你可以这样更新你table:
Update your_table b Join
(Select title, accnr from your_table where accnr is not null group by title) a
on b.title = a.title set b.accnr =a.accnr;
我有一个table这样的
title ACCNR ID
Hello1 1 1
Hello1 1 2
Hello1 3
Hello1 4
Hello2 3 5
Hello2 3 6
Hello2 7
Hello2 8
现在我想为相同的标题填充缺失的 ACCNR。
编辑:结果应为:
title ACCNR ID
Hello1 1 1
Hello1 1 2
Hello1 **1** 3
Hello1 **1** 4
Hello2 3 5
Hello2 3 6
Hello2 **3** 7
Hello2 **3** 8
我试过这个:
update refs join refs as p set refs.accnr =
IF (
SELECT GROUP_CONCAT(DISTINCT refs.accnr order by accnr))
from refs
where refs.id = p.id and refs.accnr <> '' GROUP BY refs.title
IS NULL ' ',c1) where p.id=refs.id;
原因是,我得到了这个错误
[Err] 1048 - Column 'custom_1' cannot be null
第一次尝试:
update refs join refs as p set refs.custom_1 =
(
SELECT GROUP_CONCAT(DISTINCT refs.accnr order by accnr)
from refs
where refs.id = p.id and refs.accnr <> '' GROUP BY refs.title
) where p.id=refs.id;
是什么让我错了? 如果有任何建议,我将不胜感激。
编辑:此方法使用第二个 table:
drop table if EXISTS accnr;
create table accnr (SELECT GROUP_CONCAT(DISTINCT refs.accnr order
by accnr) as accnr, concat(',',GROUP_CONCAT(refs.id order by
refs.id),',') as idlist from refs
where refs.accnr <> '' GROUP BY refs.titel,);
update refs join accnr set custom_1 = accnr.accnr where refs.id like concat('%,',refs.id,',%');
您可以通过在 UPDATE
语句中利用 sql 别名以高效的方式做到这一点:
UPDATE
tab
SET
tab.ACCNR = (
SELECT
t.ACCNR
FROM
tab t
WHERE
t.title = tab.title
LIMIT 1
)
WHERE
tab.ACCNR IS NULL
如果我理解正确的话,你只需要用与第一行相同的值更新列 accnr
。
你可以这样更新你table:
Update your_table b Join
(Select title, accnr from your_table where accnr is not null group by title) a
on b.title = a.title set b.accnr =a.accnr;