执行update
查询时(以下只是示例;update
可以使用任何查询)例如:
update t1
inner join t2 on t1.id=t2.id
set t1.name="foo" where t2.name="bar";
Query OK, 324 rows affected (1.82 sec)
Run Code Online (Sandbox Code Playgroud)
您如何查看哪些行受到影响(324 rows affected
响应中的)?我尝试将表达式转换为 a select
,例如
select * from t1
inner join t2 on t1.id=t2.id
where t1.name="foo";
Run Code Online (Sandbox Code Playgroud)
但这也会返回 之前的name="foo"
行update
。从概念上讲,我想做类似的事情
select * from rows_affected;
Run Code Online (Sandbox Code Playgroud)
但这当然行不通。是否有一种方法可以允许检查/选择受查询影响的行update
?select
或者是在之前执行此操作update
以查看哪些行将受到影响的唯一解决方案?
许多行可以有 t1.name="foo"。
如果MySQL检测到您已经拥有尝试输入的值,则它不会更新该行
但只有链接到条件 t2.name="bar" 的连接 t1 行才会显示在以下查询中
select t1.id from t1
inner join t2 on t1.id=t2.id
where t2.name="bar";
Run Code Online (Sandbox Code Playgroud)
当然,如果 t1.name 已经具有值“foo”,它不会检测到,因此它会显示不受影响的t1.ids 。
如果您需要实际的行,而不需要未关联的行,则必须编写一个搅拌过程,其中您可以
举个例子
Run Code Online (Sandbox Code Playgroud)CREATE TABLE t1 (id int auto_increment primary key,name varchar(4)); INSERT INTO t1(name) VALUES('foo'),('foo1'), ('foo'), ('test'), ('test'), ('test'), ('test'), ('test'), ('test'), ('test'); CREATE TABLE t2 (id int auto_increment primary key,name varchar(4)); INSERT INTO t2(name) VALUES('bar'),('foo1'), ('bar'), ('bar'), ('bar'), ('test'), ('bar'), ('test'), ('test'), ('test');
Run Code Online (Sandbox Code Playgroud)SELECT * FROm t1;
编号 | 姓名 -: | :--- 1 | 富 2 | 富1 3 | 富 4 | 测试 5 | 测试 6 | 测试 7 | 测试 8 | 测试 9 | 测试 10 | 10 测试
Run Code Online (Sandbox Code Playgroud)SELECT * FROM t2;
编号 | 姓名 -: | :--- 1 | 酒吧 2 | 富1 3 | 酒吧 4 | 酒吧 5 | 酒吧 6 | 测试 7 | 酒吧 8 | 测试 9 | 测试 10 | 10 测试
Run Code Online (Sandbox Code Playgroud)CREATE TEMPORARY table t1_temp SELECT id FROM t1 WHERE name = 'foo';
Run Code Online (Sandbox Code Playgroud)update t1 inner join t2 on t1.id=t2.id set t1.name="foo" where t2.name="bar";
Run Code Online (Sandbox Code Playgroud)SELECT * FROM t1;
编号 | 姓名 -: | :--- 1 | 富 2 | 富1 3 | 富 4 | 富 5 | 富 6 | 测试 7 | 富 8 | 测试 9 | 测试 10 | 10 测试
Run Code Online (Sandbox Code Playgroud)select t1.id from t1 inner join t2 on t1.id=t2.id where t2.name="bar" AND t1.id NOT IN (SELECT id FROM t1_temp);
| 编号 | | -: | | 4 | | 5 | | 7 |
db<>在这里摆弄