PostgreSQL: обновить поле с оператором выбора в той же таблице - PullRequest
2 голосов
/ 21 февраля 2011

Мне нужно обновить поле в таблице на произвольно выбранном образце.Если я выполню этот запрос, он вернет правильно выбранные 57 строк:

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

Теперь я хочу применить этот оператор SELCT, чтобы ОБНОВИТЬ item1 с помощью 'YY', но только для 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 ]

2 голосов
/ 21 февраля 2011

Замените оператор "=" на 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))
0 голосов
/ 21 февраля 2011

Вам может потребоваться использовать оператор IN вместо = для предложения 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))**
0 голосов
/ 21 февраля 2011

Chage = to "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))
...