mysql - 将 3 个 SQL 查询混合在 1 个中

标签 mysql sql

我有如下3个表

表1

Id Name
1   abcd
2   bcd
3   dabc

表2

Id2 Name2
2   xyz
3   def
4   mno

表3

Id  Id2  Value
1    4    1
2    3    1
3    4    1

现在,

从表 1 中:我必须选择名称为 %abc% 的所有 Id 从表 2 中:我必须选择 Id2,其中 Name2 是“mno” 从Table3:我必须将值从1更改为0,其中Id的值来自Table1,Id2来自Table2。

表 1:

select Id from Table1 where Name like '%abc%'

表2:

select Id2 from Table2 where Name2 = "mno"

表3:

update Table3 set Value = 0 where Id in() and Id2=

但是,我不知道如何使其成为 1 个单一查询。有人可以指导我吗?

最佳答案

引用:prior stack article

您没有解释 T1 与 T2 的关系,因此我假设了交叉连接。

每当您的数据中 T1 中有一条名称类似于“%abc%”(1,3) 的记录时。 每当 T2 中有一条名称等于 'mno' 4 的记录时,您希望表 3 中的值为 0

所以我们生成的选择应该产生 1,4 3,4

当我们将其内部连接回表 3 时,它仅选择

Id  Id2  Value
1    4    1
3    4    1

现在,我们根据上面提供的链接中概述的此选择生成更新...

UPDATE table3 
INNER JOIN (
  SSELECT t1.ID t1ID, t2.id t2ID
  FROM table1 t1
  CROSS JOIN table2
  WHERE t1.name like '%abc%'
    and t2.name like = 'mno') B
 on B.t1ID = t3.Id 
and B.t2ID = T3.ID2
SET value = 0

给我们一个结果

Id  Id2  Value
1    4    0
2    3    1
3    4    0

if we select * from table3

关于mysql - 将 3 个 SQL 查询混合在 1 个中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778467/

相关文章:

mysql - 计算最后一行,直到列值等于 mysql 中的给定值

MySQL 向大表中添加一列的性能

javascript - Php 删除函数 javascript/redirect

mysql - Symfony2 - 在 json 响应中从我的数据库 MySQL 更改字符

php - 在for循环中存储mysql中的变量

mysql - SQL:当 count() 没有行时输出 0

mysql - 在sql中停止或验证

c# - Entity Framework ——底层SQL语句

sql - 使用表变量的动态sql -TSQL

java - Symfony 执行访问数据库的 java 程序