如何通过将来自它的id与另一个表匹配来选择和更新一个表中的记录?

时间:2015-10-02 03:35:26

标签: php mysql sql join

我正在使用 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

有人可以帮我构建查询吗?

感谢。

2 个答案:

答案 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 = 2user_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

尝试两者并让我知道哪一个更快。干杯!