我有三张桌子如下
表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”
从表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=

但是,我不知道如何使它成为一个单一的查询。有人能带我上去吗?

最佳答案

参考: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 - 在1中混合3个SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34778467/

10-10 22:45