PostgreSQL:在同一个表上使用select语句更新字段

时间:2011-02-21 14:50:40

标签: postgresql select random

我需要更新随机选择的样本表中的字段。 如果我运行此查询,它将正确返回选定的57行:

SELECT * FROM table WHERE item1 = 'XX' AND item2 = 'JJJ' ORDER BY random() LIMIT (57)

我现在要做的是将SELCT语句应用于使用'YY'更新item1,但仅适用于57个随机选择的行。 我试试这个:

UPDATE table
SET item1 = 'YY'
WHERE id_item = (SELECT id_item FROM table WHERE item1 = 'XX' AND item2 = 'JJJ' 
ORDER BY random() LIMIT (57))

但它返回错误:“用作表达式的子查询返回的多行”。

如何为随机行数更新表格? 提前致谢

3 个答案:

答案 0 :(得分:2)

将“=”运算符更改为IN。

UPDATE table
SET item1 = 'YY'
WHERE id_item IN (SELECT id_item 
                  FROM table WHERE item1 = 'XX' AND item2 = 'JJJ' 
                  ORDER BY random() LIMIT (57))

答案 1 :(得分:0)

将=更改为“in”。

您需要将其更改为:

UPDATE table SET item1 = 'YY' WHERE id_item in (SELECT id_item FROM table WHERE item1 = 'XX' AND item2 = 'JJJ' ORDER BY random() LIMIT (57))

答案 2 :(得分:0)

您可能需要使用IN运算符而不是= for WHERE子句。

UPDATE table
SET item1 = 'YY'
WHERE id_item IN (SELECT id_item FROM table WHERE item1 = 'XX' AND item2 = 'JJJ' 
ORDER BY random() LIMIT (57))**