我想基于SELECT sql查询更新多行。
我想在SQL SHELL中做到这一切!
这是我的选择:
SELECT @myid := id, @mytitle := title
FROM event
WHERE pid>0 GROUP BY title
ORDER BY start;
然后,我想用这个伪代码进行更新:
foreach($mytitle as $t)
BEGIN
UPDATE event
SET pid=$myid
WHERE title=$t;
END
但我不知道如何在SQL中使用循环。
也许有一种方法可以在一个SQL查询中实现它?
我不想要任何PHP!只有SQL SHELL CODE !!!
答案 0 :(得分:4)
I want to update every rows with a pid with the id of the first occurence of an event. Start is a timestamp
我认为这应该做你想要的,但如果没有(我不确定在UPDATE查询中加入子查询)那么你可以使用临时表。
UPDATE
event
JOIN (
SELECT
MIN(pid) AS minPID,
title
FROM
event
WHERE
pid > 0
GROUP BY
title
) AS findPIDsQuery ON event.title = findPIDsQuery.title
SET
event.pid = findPIDsQuery.minPID
答案 1 :(得分:0)
Pure SQL实际上没有“循环”,本身:它是一种基于集合的描述性语言。我相信下面的更新会做你想要的(尽管你的问题陈述还有很多不足之处 - 我们对底层架构一无所知)。
update event t
set pid = ( select min(id)
from event x
where x.title = t.title
and x.pid > 0
group by x.title
having count(*) > 1
)
干杯!