我正在使用 MySQL和phpMyAdmin 。
我是数据库,RDBMS,SQL查询以及所有这些内容的新手。
我有一个名为user
的数据库表,其中包含以下字段:
user_id(primary key) Data type : int(10)
user_group_id Data type : smallint(4)
我还有一个名为user_field
的数据库表,其中包含以下字段:
user_id(primary key) Data type : int(10)
country_child_id Data type : mediumint(8)
现在我想要为上面的表选择查询和更新查询。
在选择查询中,它应该返回表格user_field
user_group_id = 6 and user.user_id = user_field.user_id
中的结果。
在更新查询中,我想要更新country_child
的{{1}}字段country_child = 1398
字段user_field
。
有人可以帮我构建查询吗?
感谢。
答案 0 :(得分:1)
尝试使用INNER JOIN获取要更新的记录。您可以尝试此查询:
UPDATE a
SET a.country_child_id = 1398
FROM user_field AS a
INNER JOIN user AS b ON a.user_id = b.user_id
WHERE b.user_group_id = 6
希望它有所帮助。
编辑:
FOR MySQL
UPDATE user_field
INNER JOIN user ON user.user_id = user_field.user_id
SET user_field.country_child_id = 1398
WHERE user.user_group_id = 6
抱歉,第一个更新语句只能在MSSQL中使用。 @Kendal是对的,在MySQL SET子句出现在INNER JOIN之后。
答案 1 :(得分:0)
我建议对此类更新使用where exists
子句,如下所示:http://sqlfiddle.com/#!9/0852a/1
update user_field
set country_child_id = 1398
where exists (
select * from user
where user.user_id = user_field.user_id
and user.user_group_id = 6
)
在示例小提琴中,您会注意到两条记录已更新 - user_id = 2
和user_id = 6
都属于user_group_id = 6
。
编辑:
我应该提一下,我喜欢这种语法,因为我发现它很容易阅读,但我可能还应该提到你可以使用更明确的inner join
。请记住,mySQL的语法似乎与其他语法略有不同,因为join
子句位于set
子句之前。
至少,我是如何让它发挥作用的:http://sqlfiddle.com/#!9/de73e/1
update user_field
inner join user
on user.user_id = user_field.user_id
set country_child_id = 1398
where user.user_group_id = 6
尝试两者并让我知道哪一个更快。干杯!