有谁可以告诉我这有什么问题以及为什么我收到错误#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
我已经研究了很长时间,我无法指出问题所在。我正在尝试将列从一个表复制到另一个表中的列。
提前谢谢你!
答案 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的答案