我得到#1248 - 每个派生表必须有自己的别名。我正在使用WAMP服务器

时间:2011-03-29 04:11:19

标签: sql wamp

有谁可以告诉我这有什么问题以及为什么我收到错误#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 个答案:

答案 0 :(得分:3)

“derived”表是括号内的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,例如Lamak对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 :(得分:1)

您应该尝试更改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的答案