Я получаю # 1248 - У каждой производной таблицы должен быть свой псевдоним.Я использую сервер WAMP - PullRequest
0 голосов
/ 29 марта 2011

Может ли кто-нибудь сказать мне, что не так с этим и почему я получаю ошибку # 1248 - Каждая производная таблица должна иметь свой собственный псевдоним.

UPDATE (SELECT t.crime_definition p1, s.crime_definition p2
  FROM crime_2007 t, crime_2010 s 
  WHERE crime_2007.crime_id_2007 = crime_2010.crime_id)
SET p1 = p2

Я исследовал в течение долгого времени, и я не могу точно определить проблему. Я пытаюсь скопировать столбец из одной таблицы в столбец другой таблицы.

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

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

«Производная» таблица - это SELECT между круглыми скобками. Вы можете (и должны в вашем случае) дать ему (недолговечное) имя.

UPDATE ( SELECT t.crime_definition p1, s.crime_definition p2
  FROM crime_2007 t, crime_2010 s 
  WHERE crime_2007.crime_id_2007 = crime_2010.crime_id
       ) AS dummyName
SET p1 = p2

Но вышеописанное также не будет работать (по крайней мере, в MYSQL), так как оно скажет вам, что «целевая таблица dummyName не может быть обновлена».

Вы можете использовать это, которое должно работать во многих системах, так как это стандарт ANSI SQL:

UPDATE crime_2007
SET crime_definition =
    ( SELECT s.crime_definition
      FROM crime_2010 s 
      WHERE crime_2007.crime_id_2007 = s.crime_id
    )

Многие системы используют «нестандартный» SQL, как ответ Ламака для SQL-Server, и он будет работать только в MYSQL:

UPDATE crime_2007 t, crime_2010 s
SET t.crime_definition = s.crime_definition
WHERE t.crime_id_2007 = s.crime_id
1 голос
/ 29 марта 2011

Вы должны попробовать изменить синтаксис вашего UPDATE (я также изменяю ваш неявный JOIN на явный):

UPDATE crime_2007
SET t.crime_definition = s.crime_definition
FROM crime_2007 t
INNER JOIN crime_2010 s 
WHERE t.crime_id_2007 = s.crime_id

Вышеприведенное работает для SQL Server, но, поскольку вы, вероятно, используете MySql, вам следует ответить @ypercube

...