2012-08-28 40 views
0

我有兩個表auth_usertempsqlite3的錯誤:對複雜的更新操作

數據類型不匹配,這些都是他們的架構:

CREATE TABLE "auth_user" (
    "id" integer NOT NULL PRIMARY KEY, 
    "username" varchar(30) NOT NULL UNIQUE, 
    "first_name" varchar(30) NOT NULL, 
    "last_name" varchar(30) NOT NULL, 
    "email" varchar(75) NOT NULL, 
    "password" varchar(128) NOT NULL, 
    "is_staff" bool NOT NULL, 
    "is_active" bool NOT NULL, 
    "is_superuser" bool NOT NULL, 
    "last_login" datetime NOT NULL, 
    "date_joined" datetime NOT NULL 
); 

CREATE TABLE "temp" ("id" integer, "username" varchar(30)); 

我想在auth_userid字段更新到idtemp表的字段提供的用戶名是相同的。我怎樣才能做到這一點?

我想這個SQL:

Update auth_user set id=(select temp.id from temp where temp.username=auth_user.username); 

但我得到這個錯誤:

Error: datatype mismatch 
+0

您能否提供您使用的示例數據,因爲我無法複製該錯誤。 – heretolearn

+0

哦,我沒有提供,因爲它有敏感信息。無論如何,我找到了答案。 – Vigneshwaran

回答

0

我發現這個問題Update table values from another table with the same user name

它類似於我的問題。在該頁面望着answer,我嘗試這個查詢

update auth_user set id=(select temp.id from temp where temp.username=auth_user.username) where exists (select * from temp where temp.username=auth_user.username); 

和它的偉大工程。與我在查詢中的問題相同,但只有一個額外的where子句。我現在沒有得到Error: datatype mismatch(但我不知道確切原因)。

+1

看起來像你的內部查詢返回一個空值。 – Sathya