Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在1中混合3个sql查询_Mysql_Sql - Fatal编程技术网

Mysql 在1中混合3个sql查询

Mysql 在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

我有三张桌子如下

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