3

我认为这是不可能的,但我想我会检查它是否是,如果不是,请寻求最有效的替代方案。

目标: 更新table_1table_2使用一个带有Inner Joinand的查询WHERE

目前我有:

UPDATE table_1
    JOIN table_2 ON table_1.user_id= table_2.user_id
SET 
    table_1.value = 9,
    table_2.value_fan = 43
WHERE 
    table_1.user_id = 1 AND table_2.fan_id =1

table_2这会根据条件正确更新WHERE,但所有条目都在table_1where table_1.user_id = 1... 中更新,忽略条件table_2.fan_id = 1


编辑对不起,我应该更清楚,我上面有一个错字,现在更正了……下面也是 SQLFiddle 的链接

http://sqlfiddle.com/#!2/58d7b/1

我希望您能看到 Table_2_winnings 已正确更新,只有一个用户 James 获得了任何奖金(因为他的 city_id =1 和 group_id =1)。但是,group_id = 1 中 table_1 中的所有用户都已更新。我只希望詹姆斯更新......

4

1 回答 1

3
ON table_1.city= table_2.city

是查询中唯一的联接过滤器。由于 city 可以在两个表中多次出现,因此内部联接的行为类似于交叉联接。看到这个小提琴。因此,为了获得所需的列,只需再添加一个连接过滤器

and table_1.user = table_2.user;

所以你的更新查询将是:

UPDATE table_1,table_2    
SET 
    table_1.table_1_winnings = 6,
    table_2.table_2_winnings = 43
WHERE 
    table_1.city = 1 AND table_2.city_id =1
and table_1.city= table_2.city
and table_1.user = table_2.user;

小提琴

于 2013-07-16T10:40:31.267 回答