下面的SELECT查詢和UPDATE查詢具有相同的FROM子句和WHERE子句。因此,我期望SELECT查詢返回與UPDATE查詢匹配並受其影響的相同數量的行,但正如所見,情況並非如此。SQL UPDATE如何比類似的SELECT匹配更多的行?
我不知道是否有關,但更新所看到,我試圖保存記錄的用戶名和電子郵件中的另一列,但最後一個查詢所看到的,我沒有保存電子郵件,只是用戶名。
這是爲什麼?
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 | [email protected] |
+--------------+------------+-----------+---------------------+
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>
你在那張桌子上有觸發器嗎?也許觸發器正在改變2個額外的行 - 例如在審計表或類似的? –
@RB。好主意。檢查,並沒有觸發器。 – user1032531
MySQL允許在單個語句中更新多個表?我從來不知道! – Brandon