Mysql 在1中混合3个sql查询
我有三张桌子如下 表1Mysql 在1中混合3个sql查询,mysql,sql,Mysql,Sql,我有三张桌子如下 表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,其中名称2是“mno” 来自表3:我必须将值从1更改为0,其中Id的值来自表1,Id2来自表2 表1: select Id from T
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,其中名称2是“mno”
来自表3:我必须将值从1更改为0,其中Id的值来自表1,Id2来自表2
表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=
但是,我不知道如何让它成为一个单一的查询。有人能带我上去吗?请参阅:
你们并没有解释T1和T2的关系,所以我假设了交叉连接
无论何时,只要在T1中有一条数据中名称为“%abc%”(1,3)的记录。。
只要T2中有一条记录的名称等于'mno'4,那么您就希望表3中的值为0
因此,我们生成的select应该生成
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
或
你应该考虑一下更新。。。存在的情况如下:
update Table3 set Value = 0
WHERE EXISTS (SELECT 1 FROM Table1 where Name LIKE '%abc%' AND Table1.Id=Table3.Id )
AND EXISTS (SELECT 1 FROM Table2 where Name2 = "mno" AND Table2.Id2=Table3.Id2)
您应该查看联接查询“”这里有一个很好的联接可视化帮助:请注意,尽量避免在子查询中使用,而是使用EXISTS。参考:谢谢,不太感谢。阅读有关优化器对子查询优化的信息
update Table3
set value = 0
where Id in (select Id from Table1 where Name like '%abc%')
and Id2 in (select Id2 from Table2 where Name2 = 'mno')
update Table3 set Value = 0
WHERE EXISTS (SELECT 1 FROM Table1 where Name LIKE '%abc%' AND Table1.Id=Table3.Id )
AND EXISTS (SELECT 1 FROM Table2 where Name2 = "mno" AND Table2.Id2=Table3.Id2)