Как я могу сослаться на строку, которую обновление в настоящее время обновляет? - PullRequest
0 голосов
/ 11 октября 2009

ТАБЛИЦА:

  • студент (имя, точка)
  • playsin (имя-> ученик (имя), оценка)

Я пытаюсь использовать:

UPDATE STUDENT
   SET points = points + CONSTANT * (SELECT score 
                                       FROM PLAYSIN 
                                      WHERE playsin.name = student.name);

Ответы [ 3 ]

2 голосов
/ 11 октября 2009

Попробуйте:

UPDATE STUDENT s
   SET points = s.points + CONSTANT * (SELECT p.score 
                                        FROM PLAYSIN p 
                                       WHERE p.name = s.name)

Псевдонимы таблиц - очень хорошая привычка.

1 голос
/ 12 октября 2009

Вы также можете попробовать обновить встроенное представление:

UPDATE (select s.name student_name,
               s.points student_points,
               p.score  playsin_score
          from STUDENT s,
               PLAYSIN p
         where p.name = s.name)
SET    student_points = student_points + CONSTANT * playsin_score;

Это также ограничивает строки в STUDENT, которые обновляются только набором, для которого есть является строкой в ​​PLAYSIN (вы также можете учитывать в своем текущем коде, что происходит со SCORE, если этот подзапрос может возвращать NULL). Вам понадобится уникальный или первичный ключ для playsin.name, чтобы использовать этот синтаксис, чтобы избежать ошибки проверки кардинальности соединения, но если это невозможно, тогда может быть полезен оператор MERGE. В любом случае, стоит рассмотреть MERGE, если у вас также есть код для добавления в STUDENT любых новых имен в PLAYSIN.

0 голосов
/ 13 октября 2009

Вы можете попробовать это следующим образом:

UPDATE student s, playsin p
SET s.points = s.points + CONSTANT * p.score
WHERE p.name=s.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...