mysql - SQL UPDATE如何匹配比类似SELECT更多的行?

标签 mysql sql

下面的 SELECT 查询和 UPDATE 查询具有相同的 FROM 子句和 WHERE 子句。因此,我希望 SELECT 查询返回与 UPDATE 查询匹配和影响的相同行数,但正如所见,情况并非如此。

我不知道它是否相关,但正如更新所见,我试图将记录的用户名和电子邮件保存在另一列中,但正如上次查询所见,我没有保存电子邮件,只是用户名。

为什么会这样?

mysql> SELECT p.old_username, p.username, p.old_email, u.email
    -> FROM users u INNER JOIN people p ON p.id = u.id INNER JOIN entities e ON e.id = p.id
    -> WHERE u.id =1753671666 AND u.id !=506836355 AND e.sites_id =2846702735;
+--------------+------------+-----------+---------------------+
| old_username | username   | old_email | email               |
+--------------+------------+-----------+---------------------+
| NULL         | myusername | NULL      | myemail@example.com |
+--------------+------------+-----------+---------------------+
1 row in set (0.00 sec)

mysql>
mysql> UPDATE
    -> users u INNER JOIN people p ON p.id = u.id INNER JOIN entities e ON e.id = p.id
    -> SET p.old_username = p.username, p.username = NULL,
    -> p.old_email = u.email, u.email = NULL,
    -> e.record_status = 'inactive', e.date_modified = NOW( ), e.modified_by_id =506836355
    -> WHERE u.id =1753671666 AND u.id !=506836355 AND e.sites_id =2846702735;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql>
mysql> SELECT p.old_username, p.username, p.old_email, u.email
    -> FROM users u INNER JOIN people p ON p.id = u.id INNER JOIN entities e ON e.id = p.id
    -> WHERE u.id =1753671666 AND u.id !=506836355 AND e.sites_id =2846702735;
+--------------+----------+-----------+-------+
| old_username | username | old_email | email |
+--------------+----------+-----------+-------+
| myusername   | NULL     | NULL      | NULL  |
+--------------+----------+-----------+-------+
1 row in set (0.00 sec)

mysql>

最佳答案

SELECT 语句报告单行是连接查询的结果。

但是你正在更新 3 表:

p.old_username (and several others)
e.date_modified (and others)
u.email

因此有 3 个更新。

关于mysql - SQL UPDATE如何匹配比类似SELECT更多的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086751/

相关文章:

mysql - 如何在 MySQL 中同时使用 MAX 和 LIMIT

mysql - 如何将 datediff 和 curdate() 从 MySql 转换为 PostgreSQL 以获取每周选择范围

sql - 在 H2 数据库中插入当前日期和时间

php - 根据相同的id显示记录,但删除sql上的相似性

php - 缩短 MySQL 代码以获取基于变量的更多信息

MySQL - 从两个表中选择 COUNT

mysql - SQL女士2005 : Select a ID for a particular date where that date lies between fromdate and Todate

SQL服务器: can't save/change table design

php - 使用 codeigniter 更新特定行?

mysql - 如何在连接字段中使用逗号分隔列表连接两个表