MySQL多表关联更新及删除 SQL


MySQL多表关联更新及删除

一、  多表关联更新

问题描述:现有tdb_goods表(含有具体信息)和tdb_goods_cates表(没有具体信息),需要查询tdb_goods表的所有记录,并且按"类别"分组,且将分组结果写入到tdb_goods_cates数据表。然后通过tdb_goods_cates数据表来更新tdb_goods表

2  查询tdb_goods表的所有记录,并且按"类别"分组

SELECT  goods_cate  FROM  tdb_goods  GROUP  BYgoods_cate;

2  将分组结果写入到tdb_goods_cates数据表

INSERT  tdb_goods_cates  (cate_name)  SELECTgoods_cate  FROM  tdb_goods  GROUP  BY  goods_cate;

2  通过tdb_goods_cates数据表来更新tdb_goods表

UPDATE  tdb_goods  INNER  JOIN  tdb_goods_catesON  goods_cate  =  cate_name

SET  goods_cate  =  cate_id  ;

二、  多表关联删除

2  从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉

DELETE  t1  FROM  t1,t2  WHERE  t1.id=t2.id  或DELETE  FROM  t1  USING  t1,t2  WHERE  t1.id=t2.id

2  从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉

DELETE  t1  FROM  t1  LEFT  JOIN  T2  ON  t1.id=t2.idWHERE  t2.id  IS  NULL  或

DELETE  FROM  t1,USING  t1  LEFT  JOIN  T2  ONt1.id=t2.id  WHERE  t2.id  IS  NULL

2  从两个表中找出相同记录的数据并把两个表中的数据都删除掉

DELETE  t1,t2  from  t1  LEFT  JOIN  t2  ONt1.id=t2.id  WHERE  t1.id=25(注意此处的delete  t1,t2  from  中的t1,t2不能是别名)

如:delete  t1,t2  from  table_name  as  t1left  join  table2_name  as  t2  on  t1.id=t2.id  where  table_name.id=25  在数据里面执行是错误的(MySQL  版本不小于5.0在5.0中是可以的)

上述语句改写成

delete  table_name,table2_name  fromtable_name  as  t1  left  join  table2_name  as  t2  on  t1.id=t2.id  wheretable_name.id=25  在数据里面执行是错误的(MySQL  版本小于5.0在5.0中是可以的)

2  两张表关联删除:

DELETE  a,b  FROM  table1  a  INNER  JOIN  table2  b  ON  a.id  =  b.aid  WHERE  a.id  =  '1'或DELETE  a,b  FROM  table1  a,table2  b  WHERE  a.id  =  b.aid  AND  a.id  =  '1'

2  三张表删除:

DELETE  a,b,c  FROM  table1  a  INNER  JOIN  table2  b  ON  a.id  =  b.aid

INNER  JOIN  table3  c  ON  a.id  =  c.aid  WHERE  a.id  =  '1'

不过这样有一个问题,就是如果a表里数据,而b表或者c表里没数据,那么整个删除就失败,即删除0条数据

如果你的主表一定有数据,而关联的表有可能有数据也有可能没数据的话,我们可以通过左连接删除的方式,把两张表都删除。无论关联的表有没有数据,主表都可以删除成功

DELETE  a  ,b  ,c  FROM  table1  a  LEFT  JOIN  table2  b  ONa.id  =  b.aid

LEFT  JOIN  table3  c  ON  a.id  =  c.aid  WHERE  a.id  =  1

签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回