mysql中多表关联删除,怎样做?谢谢...
发布网友
发布时间:2022-04-23 02:01
我来回答
共7个回答
懂视网
时间:2022-04-30 07:14
在 MySQL 3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。
如果一个 ORDER BY 子句被使用(从 MySQL 4.0.0 开始支持),记录行将以指定的次序被更新。这实际上只有连同 LIMIT 一起才有用。
从 MySQL 4.0.4 开始,你也可以执行一个包含多个表的 UPDATE 的操作:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
注意:多表 UPDATE 不可以使用 ORDER BY 或 LIMIT。
多表删除
第一个多表删除格式从 MySQL 4.0.0 开始被支持。第二个多表删除格式从 MySQL 4.0.2 开始被支持。
仅仅在 FROM 或 USING 子句 之前 列出的表中的匹配记录行被删除。效果就是,你要以从多个表中同时删
除记录行,并且同样可以有其它的表用于检索。
在表名后的 .* 仅仅是为了兼容 Access:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
or
DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
在上面的情况下,我们仅仅从 t1 和 t2 表中删除匹配的记录行。
如果一个 ORDER BY 子句被使用(从 MySQL 4.0.0 开始支持), 记录行将以指定的次序删除。这实际上只有连同 LIMIT 一起才有用。示例如下:
DELETE FROM somelog
WHERE user = ‘jcole‘
ORDER BY timestamp
LIMIT 1
这将删除匹配 WHERE 子句的,并且最早被插入(通过 timestamp 来确定)的记录行。
DELETE 语句的LIMIT rows 选项是 MySQL 特有的,它告诉服务器在控制权被返回到客户端之前可被删除的最大记录行数目。这可以用来确保一个特定的 DELETE 命令不会占用太长的时间。你可以简单地重复使用 DELETE 命令,直到被影响的记录行数目小于 LIMIT 值。
从 MySQL 4.0 开始,在 DELETE 语句中可以指定多个表,用以从一个表中删除依赖于多表中的特殊情况的记录行。然而,在一个多表删除中,不能使用 ORDER BY 或 LIMIT。
假设有两个表,tab1,tab2,分别有产品名称和产品价格,现在我想用tab2的价格替换tab1的价格,我写的语句是Update tab1 set tab1.产品价格=tab2.产品价格 where tab1.产品名称=tab2.产品名称
结果出现错误,提示为:列前缀 ‘tab2‘ 与查询中所用的表名或别名不匹配。请问应该怎样写,
SQL语句是不支持多表同时更新的。
应该这样写
update tab1 set tab1.产品价格 = (select tab2.产品价格 from tab2 where tab2.产品名称 = tab1.产品名称) where tabl1.产品名称 in (select tab2.产品名称 from tab2)
后面的where tab1.产品名称 in (select tab2.产品名称 from tab2) 这句保证了如果tab1的产品在tab2没有记录时不会出错。
在 开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件让开发人员很头痛的事情.本文总结了Update语句更新多表时在SQL Server,Oracle,MySQL三种数据库中的用法.我也试了SQLite数据库,都没成功,不知是不支持多表更新还是咋的.
在本例中:
我们要用表gdqlpj中的gqdltks,bztks字段数据去更新landleveldata中的同字段名的数据,条件是当landleveldata 中的GEO_Code字段值与gdqlpj中的lxqdm字段值相等时进行更新.
SQL Server语法:
UPDATE
{
table_name WITH ( < table_hint_limited > [ ...n ] )
| view_name
| rowset_function_limited
}
SET
{ column_name = { expression | DEFAULT | NULL }
| @variable = expression
| @variable = column = expression } [ ,...n ]
{ { [ FROM { < table_source > } [ ,...n ] ]
[ WHERE
< search_condition > ] }
|
[ WHERE CURRENT OF
{ { [ GLOBAL ] cursor_name } | cursor_variable_name }
] }
[ OPTION ( < query_hint > [ ,...n ] ) ]
SQL Server示例:
update a
set a.gqdltks=b.gqdltks,a.bztks=b.bztks
from landleveldata a,gdqlpj b
where a.GEO_Code=b.lxqdm
Oracle语法:
UPDATE updatedtable
SET (col_name1[,col_name2...])=
(SELECT col_name1,[,col_name2...]
FROM srctable [WHERE where_definition])
Oracel 示例:
update landleveldata a
set (a.gqdltks, a.bztks)=
(select b.gqdltks, b.bztks from gdqlpj b
where a.GEO_Code=b.lxqdm)
MySQL语法:
UPDATE table_references
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
MySQL 示例:
update landleveldata a, gdqlpj b
set a.gqdltks= b.gqdltks,
a.bztks= b.bztks
where a.GEO_Code=b.lxqdm
版权声明:本文为博主原创文章,未经博主允许不得转载。
MySQL联合多表更新和删除
标签:
热心网友
时间:2022-04-30 04:22
1、首先打开终端窗口。mysql -uroot -p进入mysql。
2、进入数据库,然后查看已有的表格,以免名字重复。
3、创建第一个表格,插入数据。
4、创建第二表格,插入数据。
5、创建第三个表格,并且和第一第二个表格关联。
6、INSERT INTO zoo VALUES(1, 1, 2);INSERT INTO zoo VALUES(1, 2, 1);这个时候就能够把他们直接的数据互相关联删除了。比如dog的1和cat的2。
热心网友
时间:2022-04-30 05:40
1、现在我们以查询员工角色和权限为例:select * from member m left join member_role mr on m.mid=mr.mid left join role r on mr.rid=r.rid。
2、执行sql执行计划,查看mysql的sql执行结果。现在表进行了全表扫描了。
3、现在在所有的右表上建立一个索引:create index mr_index on member_role(mid)。
4、建立好索引之后重新执行sql执行计划。 explain select * from member m left join member_role mr on m.mid=mr.mid left join role r on mr.rid=r.rid。
5、因此索引最好设置在需要进场查询的字段中。
6、尽可能减少join语句中循环的总次数,永远用小结果集驱动大的结果集。当无法保证被驱动表的join条件字段被索引且内存资源充足的前提下,不要吝啬JoinBuffer的设置。
热心网友
时间:2022-04-30 07:15
mysql中多表关联删除,怎样做?
两个表比如delete后面是要删除的表on是关联的字段where是条件
delete a,b from `ecs_goods` as a join `ecs_goods_gallery` as b on a.goods_id = b.goods_id where a.id ='123'
三个表(依次类推)
delete a,b,c from `ecs_goods` as a join
`ecs_goods_gallery` as b on a.goods_id = b.goods_id join
`ecs_goods_cat` as c on a.goods_id = c.goods_id where a.id
='123'
热心网友
时间:2022-04-30 09:06
两个表比如delete后面是要删除的表on是关联的字段where是条件
delete a,b from `ecs_goods` as a join `ecs_goods_gallery` as b on a.goods_id = b.goods_id where a.id ='123'
三个表(依次类推)
delete a,b,c from `ecs_goods` as a join
`ecs_goods_gallery` as b on a.goods_id = b.goods_id join
`ecs_goods_cat` as c on a.goods_id = c.goods_id where a.id
='123'
热心网友
时间:2022-04-30 11:14
给你举个例子
select * from 表1 join 表2 on 表1.字段名=表2.字段名 join 表3 on 表1.字段名=表3.字段名
你可以用left join ,多一个表 在后面按照规律加上即可
热心网友
时间:2022-04-30 13:39
可以用事务除理的方式删除