Обновить все строки одного столбца из другой таблицы - PullRequest
0 голосов
/ 25 декабря 2010

Вот мои таблицы;

TableP:

Pname | Psize
x | -
y | -
z | -
g | -
h | -

ТАБЛИЦА:

Pname | Pdate | Ptext
x | XX.XX.XXXX | aasdhb
x | XX.XX.XXXX | asdbahsbdhasbdh
y | XX.XX.XXXX | ajsdbajsdba
y | XX.XX.XXXX | asndansjdbasd
x | XX.XX.XXXX | asd
z | XX.XX.XXXX | asdasbdhasb
g | XX.XX.XXXX | asdnjasdja
g | XX.XX.XXXX | asndjsabdas
h | XX.XX.XXXX | asndjand
x | XX.XX.XXXX | asdjasndnaksd

Как вы можете заметить, я добавил новый столбец (Psize), в котором хранится длина TableS.Ptext.

Как я могу обновить Psize с соответствующей длиной Ptext?

Вот мой запрос, который не работает :) (Подзапрос возвращает более 1 строки)

UPDATE TableP
   set TableP.Psize = (SELECT sum(LENGTH(Ptext)) as length
                         FROM TableS group by Pname)
 where TableP.Pname = TableS.Pname

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Другая форма, сохраняющая ваш отбор:

UPDATE TableP p
set p.Psize = (
    SELECT sum(LENGTH(s.Ptext)) 
    FROM TableS s
    where s.pname = p.pname
)
where exists ( -- just to keep it consistent
  select 1
  from tables s
  where s.pname = p.pname
);
1 голос
/ 25 декабря 2010

Попробуйте:

UPDATE TableP p
inner join (
    SELECT Pname, sum(LENGTH(Ptext)) as length 
    FROM TableS 
    group by Pname
) s on p.Pname = s.Pname
set p.Psize = s.length
...