使用select更新查询 - 它如何知道要更新的行

时间:2014-07-02 04:54:39

标签: mysql

我有以下查询正常工作,但我不明白为什么。我正在更改每一行的余额列。它如何知道要为特定客户更新哪一行。

UPDATE phppos_customers SET balance = 
IFNULL((SELECT SUM(transaction_amount) 
FROM `phppos_store_accounts`
WHERE deleted = 0 and customer_id = phppos_customers.person_id), 0);

1 个答案:

答案 0 :(得分:0)

为了举例,假设您有以下两个表

[Users]
+---------+----------+
| user_id | username |
+---------+----------+
|       1 | patrick  |
|       2 | chris    |
+---------+----------+

[Names]
+---------+------------+-----------+
| user_id | first_name | last_name |
+---------+------------+-----------+
|       1 | Patrick    | Stewart   |
|       2 | Chris      | Angel     |
+---------+------------+-----------+

如果你有一个类似原始帖子中的更新查询,你可能想告诉它如何对齐这两个表。如果您有子句WHERE Users.user_id = Names.user_id,那么您实际上是在告诉SQL查看数据,就像两个表并排对齐一样,使用两个表中的user_id来确定它们的匹配位置。这意味着user_id 1的[Names]表中的first_name和last_name将是更新[Users]表中user_id 1的行时使用的内容。它基本上是查看合并在一起的数据,如下所示:

[Users] and [Names] tables aligned by the user_id columns
+---------+----------+---------+------------+-----------+
| user_id | username | user_id | first_name | last_name |
+---------+----------+---------+------------+-----------+
|       1 | patrick  |       1 | Patrick    | Stewart   |
|       2 | chris    |       2 | Chris      | Angel     |
+---------+----------+---------+------------+-----------+

因此,当SQL正在进行更新时,它使用来自另一个表的相应数据更新每一行,使用此对齐来了解每行更新的数据。

从多个表中对齐/合并数据的过程称为SQL中的加入,如果您感兴趣,可以使用更多information that illustrates how it works

相关问题