2011-03-29 26 views
0

任何人都可以告訴我這是什麼問題,爲什麼我得到錯誤#1248 - 每個派生表都必須有自己的別名。 ?我得到#1248 - 每個派生表都必須有自己的別名。我正在使用WAMP服務器

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

您正在使用哪種RDBMS?我猜WAMP的MySQL。 – 2011-03-29 06:17:10

回答

3

「派生」表是括號之間的選擇。你可以(也應該在你的情況下)給它一個(短命的)名字。

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 only:

UPDATE crime_2007 t, crime_2010 s 
SET t.crime_definition = s.crime_definition 
WHERE t.crime_id_2007 = s.crime_id 
+0

非常感謝你!你的第一個例子工作完美 – Courtney 2011-03-29 14:15:10

+0

@Courtney:我的第一個,真的嗎?哦,我認爲它不會。我在我的測試數據庫中嘗試過,但在創建表格時可能做了錯誤或不同的操作:) – 2011-03-29 14:32:12

+0

您可以檢查所有可能的解決方案並測試效率(如果表格很大)。如果你只需要一次運行一次,就不需要這樣的測試。 – 2011-03-29 14:33:26

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的回答

+0

我認爲你的查詢只適用於SQL-Server。 – 2011-03-29 06:02:11

+0

@ypercube:你說得對。上述查詢必須可能只適用於SQL服務器。我會在答案中加上這一點。 +1給你的答案。 – Lamak 2011-03-29 12:22:35

相關問題