我已经使用SQL
中的Select语句选择了一组rows
,并且我正在试图找出如何将该table
中的列更新为基于所述selection
的值。
选择:
SELECT user.userID FROM user WHERE user.status = '1' or user.status = '2' LIMIT 1000 OFFSET 50;
更新:
UPDATE user SET user.status = '3';
我正在寻找的最终结果是将所有selected users
中的status column
更新为"3"。我希望能够在一个SQL query
中做到这一点,而不必循环或做任何事情。
感谢您的真知灼见!
更新:
对不起!我忘记加offset
了。我想选择返回的前50行之后的行。因此,我希望前50行之后符合条件的所有行都将状态列更改为3。
OLD
UPDATE user SET user.status='3'WHERE user.status='1'or user.status='2';
请尝试此查询。。。
新
编辑问题后(按偏移量(
请尝试以下查询您的偏移量。
UPDATE user SET user.status = '3' where user.userID NOT IN(Select
userid from
(SELECT userID as userid FROM user WHERE status = '1' or status = '2' LIMIT 50)
as temptbl);
UPDATE user SET user.status = '3' where user.status in ('1', '2');
更新:
UPDATE user SET user.status = '3' where user.userID in (SELECT user.userID FROM user WHERE user.status = '1' or user.status = '2' LIMIT 1000 OFFSET 50);
请尝试此
UPDATE user SET user.status = '3' WHERE user.status IN ( '1' , '2' )
新增:
使用两个子选项(感谢Yograj Sudewad向我指出我的错误(
UPDATE user
SET user.status = '3'
WHERE user.userID IN (
SELECT userId
FROM (
SELECT user.userID
FROM user
WHERE user.status = '1' or user.status = '2'
LIMIT 1000 OFFSET 50
) AS tableWithNoName
)
旧的:
您也可以在UPDATE
中使用SELECT
中的WHERE
部分。像这样
UPDATE user
SET user.status = '3'
WHERE user.status = '1'
OR user.status = '2';
但是,如果您想要从uid列表中更新,那么:
<?php
// The uid list from the select may be
$uid_list = array(1,4,7,12,401);
// then you could make
$sql = "
UPDATE user
SET user.status = '3'
WHERE user.userID IN (" . implode(',', $uid_list) , ")
";