2016-01-06 71 views
0

我的表:SQL语法错误的JOIN

 USERS_1:        USERS_2: 
    +------------+---------+  +------------+---------+ 
    | id  |username |  | username |claimedBy| 
    +------------+---------+  +------------+---------+ 
    |  4  | pitiqu |  | myUsername | NULL |<- this should become 4 
    +------------+---------+  +------------+---------+ 

MY SQL:(字面上的MySQL)

UPDATE UL 
SET UL.claimedBy = US.username 
FROM USERS_1 as UL 
INNER JOIN USERS_2 as US 
ON US.id = 4 
where UL.username="myUsername" 

这可能很明显,我想设置表2的claimed_by(为用户名“myUsername”)转换为表1中id = 4处的用户名“pitiqu”。

如果所有“u sername“令人困惑。希望表和SQL清除我的问题。

弹出了错误:

#1064 - 你有一个错误的SQL语法;检查对应于您的MySQL服务器版本的手册,以便在'FROM USERS_1'作为UL INNER JOIN USERS_2作为US ON US.id = 4使用'UL'在第3行时使用的正确语法

为什么会发生这种情况.. 。 任何人?

编辑:不好意思的语法。我一直在尝试使用THIS示例,并在编辑它时删除了SET。

回答

3

你可以使用这样的更新查询:如果你想加入

update 
    USERS_2 
set 
    claimedBy = (SELECT username FROM USERS_1 WHERE id=4) 
where 
    username="myUsername" 

中,正确的语法是这样的但是在这个特定的上下文中它没有多大意义,我建议你使用第一个查询:

UPDATE 
    USERS_1 as UL INNER JOIN USERS_2 as US ON US.id = 4 
SET 
    UL.claimedBy = US.username 
WHERE 
    UL.username="myUsername" 
+0

这就是我一直在寻找的东西。我知道的第一个例子,但我的目的是现在使用JOIN关键字,所以我会坚持第二个例子。 谢谢。 –

1

您在UPDATE查询中使用FROM。这是完全错误的。

重写这将是如下,利用一个子查询的一种方式:

UPDATE USERS_2 set claimedBy = (SELECT id from USERS_1 where username = "pitiqu") 
where username="myUsername"; 
+0

哦,这是尴尬,但仍然...我要编辑一个适当的SET,它仍然不会工作。这是我从互联网上“展示”我的问题。 –

2

这是一个错误的语法。你应该使用更新连接,如

UPDATE UL u 
JOIN USERS_2 US ON US.id = 4 
SET u.claimedBy = US.username 
where u.username='myUsername';