我有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=
但是,我不知道如何使它成为单一查询。有人可以指导我吗?
答案 0 :(得分:2)
你还没有解释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)