纯MySQL循环更新多行

时间:2011-10-13 16:43:08

标签: mysql sql

我想基于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 !!!

2 个答案:

答案 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
          )

干杯!