在1中混合3个sql查询

时间:2016-01-13 22:41:35

标签: 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

现在,

从table1:我必须选择名称为%abc%的所有ID 从表2:我必须选择Id2,其中Name2是" mno" 从表3:我必须将值从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=

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

3 个答案:

答案 0 :(得分:2)

请参阅: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

答案 1 :(得分:0)

update t3
set t3.Value = 0
from Table3 t3
inner join Table1 t1
  on t3.Id = t1.Id
inner join Table2 t2
  on t3.Id2 = t2.Id2
where t1.Name like '%abc%' and t2.Name2 = 'mno'

OR

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')

答案 2 :(得分:0)

您应该考虑UPDATE ... WHERE EXISTS如下:

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)