这是我的表格的样子
id|position | name
1 | 4 | a
1 | 2 | b
1 | 3 | c
1 | 1 | d
23| 5 | a
23| 1 | b
24| 1 | a
这就是我想要的:
id|position| name
1 | 1 | a
1 | 2 | b
1 | 3 | c
1 | 4 | d
23| 1 | a
23| 5 | b
24| 1 | a
目前我的SQL查询按升序显示id和名称,如下所示:
ORDER BY id, name
(表示它首先排列id,然后是名称)
但是,我想要重新分配 / OVER_WRITE / 更新位置值。因此,对于一个id(具有许多名称),我想按名称的升序分配位置编号。
我希望我的问题很明确。
答案 0 :(得分:0)
您可以使用INSERT INTO ... SELECT
查询从查询结果中创建名为newtable
的新表:
INSERT INTO newtable (id, position, name)
SELECT t1.id AS id, t1.position AS position, t2.name AS name
FROM (
SELECT * FROM table ORDER BY id ASC, position ASC
) t1,
(
SELECT * FROM table ORDER BY id ASC, name ASC
) t2
答案 1 :(得分:0)
update TABLENAME left join
(select tp1.id,tp1.name,tp2.position from
(select t.*,(select count(*) from TABLENAME where name<t.name) as rownum from TABLENAME t order by id,name) tp1
left join
(select t.*,(select count(*) from TABLENAME where position<t.position) as rownum from TABLENAME t order by id,position) tp2
on tp1.rownum = tp2.rownum
) as tmp
on TABLENAME.id=tmp.id and TABLENAME.name=tmp.name set TABLENAME.position=tmp.position ;
如果表格除了您显示的列之外还有一些唯一列,您可以使用唯一列替换rownum
。现在,我使用count(*)
和name
生成一个唯一列。
此外,这个sql脚本可能会得到结果,但它的效果很差。