没有任何 JOIN 谓词的 MySQL JOIN

标签 mysql sql

我有两个表:

`table_1`

+----+----------+
| id | value    |
+----+----------+
|  1 | value_1  |
|  2 | value_2  |
| 10 | value_10 |
| 20 | value_20 |
| 50 | value_50 |
+----+----------+
<小时/>
`table_2`

+----+----------+
| id | value    |
+----+----------+
|  1 | value_1  |
|  2 | value_2  |
| 10 | value_10 |
| 20 | value_20 |
| 50 | value_50 |
+----+----------+

现在我运行了以下查询:

UPDATE table_1, table_2 SET table_1.value = 'updated' WHERE table_1.id = '20';

我得到了以下结果:

Query OK, 1 row affected (0.45 sec)
Rows matched: 1  Changed: 1  Warnings: 0

现在,如果我运行此查询:

SELECT * FROM table_1, table_2 WHERE table_1.id = '20';

我得到 5 行:

5 rows in set (0.00 sec)

这是非常正确的。

为什么 UPDATE 查询的行为与 SELECT 不同? 是否有任何通用方法可以将上述 UPDATE 查询转换为 SELECT 查询,以便我们无需实际执行 UPDATE 查询即可获取受影响的行数?

在上述情况下,我们在两个查询中都应该得到 1。

最佳答案

受影响的行计数是正确的,select 返回的行数也是正确的。 .

这在documentation中有非常清楚的解释。 :

For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. Each matching row is updated once, even if it matches the conditions multiple times.

selecttable1 返回同一行多次。无论如何,此行仅由update更新一次。 。它获得哪个值(如果有选择)是任意的。你不应该依赖某种特定的行为。而且,更新不是累积的。

关于没有任何 JOIN 谓词的 MySQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24183449/

相关文章:

SQL 更新 - 多列

php sql 将主键和外键链接在一起(链表)

java.lang.ClassNotFoundException : at jdbc. DatabaseAccess.doGet(DatabaseAccess.java:25)

mysql将两行合并为一行

PHP/MYSQL sql选择

sql - 如何使用 SQL 从 MongoDB ObjectId 检索日期

javascript - 如何将 php 中的数组返回给 $.ajax 成功函数

mysql - 组合 IN 和 AND 查询

mysql - 使用 mysql 进行日期重叠以进行预订

sql - 如何在 Sybase sql 子查询的结果上正确使用 GROUP BY