Обновить выбранные строки - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть таблица, как показано ниже

    name    spent
    a       3.2
    a       5.5
    a       3
    b       4.6
    b       16
    c       1.2
    c       7

Я хочу обновить использованный столбец первых 2, где имя "a"

Я хочу сделать это одним запросом

мой желаемый результат

    name    spent
    a       1
    a       1
    a       3
    b       4.6
    b       16
    c       1.2
    c       7

Ответы [ 6 ]

0 голосов
/ 13 февраля 2019

Вам нужно использовать подзапрос, чтобы найти значения id первых 2 строк значений с именем a, а затем UPDATE только строки, имеющие эти значения id:

UPDATE table1
SET spent = 1
WHERE id IN (SELECT id 
             FROM table1
             WHERE name = 'a'
             ORDER BY id
             LIMIT 2);
SELECT * FROM table1

Вывод:

id  name    spent
6   a       3
1   a       1
4   a       1
2   b       16
5   b       4.6
7   c       1.2
3   c       7

Демонстрация на dbfiddle

0 голосов
/ 13 февраля 2019

update tablename set spent = 1 where name = 'a' and id in (select top 2 id from tablename where name = 'a' order by id asc)

Сначала я выбрал бы вершину, а затем обновил ее в соответствии с сгенерированным идентификатором из этого выбора

0 голосов
/ 13 февраля 2019

Вы можете использовать limit только для обновления первых двух строк, где name = a:

update TABLE
set spent = 1
where name = a
order by id
limit 2;
0 голосов
/ 13 февраля 2019
update table_name set spent='1' where name='a' and id in (4,1)
0 голосов
/ 13 февраля 2019
update table_name set spent=1 where name='a' and spent>3
0 голосов
/ 13 февраля 2019

почему бы вам просто не рассмотреть идентификатор

update table
  set spent=1
where id in (1,4) and name='a'

в качестве обновленного вопроса и отсутствие идентификатора в данных примера, чтобы вы могли использовать подзапрос

UPDATE table1
SET spent = 1
WHERE spent IN (SELECT spent 
             FROM table1
             WHERE name = 'a'
             ORDER BY spent
             LIMIT 2) and name='a';

select * from table1 order by name,spent;
name    spent
  a     1
  a     1
  a     3
  b     4.6
  b     16
  c     1.2
  c     7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...