我有如下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 个单一查询。有人可以指导我吗?
最佳答案
您没有解释 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/