作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我必须使用 PHP 的 mysql_query() 函数更新 mysql 表。因此,我只需要在一条语句中发送以下 UPDATE 查询:
SET @i = 0;
UPDATE mytable SET id=(@i:=@i+1);
我已经阅读了一些示例,其中可以使用使用表别名的 SELECT 语句来完成此操作,例如:
SELECT @rn:=@rn+1 AS rank, t1.* FROM (SELECT * FROM mytable) t1, (SELECT @rn:=0) t2
有什么方法可以将这些表别名与我需要使用的 UPDATE 语句一起使用吗?
编辑:
根据 Topher Hunt 的回答,我想我可以使用以下方法创建 mytable 的副本:
创建表 mytable_copy SELECT @rn:=@rn+1 AS id, t1.* FROM (SELECT * FROM mytable) t1, (SELECT @rn:=0) t2
然后 DROP mytable 并将 mytable_copy 重命名为 mytable。
此语句是否会创建 mytable 的精确副本,具有与 mytable 中相同的字段类型和长度?
最佳答案
如果您在表之间使用 JOIN,则 SELECT 和 UPDATE 语句之间的语法非常相似。示例:
SELECT *
FROM table1 a
JOIN table2 b ON a.something = b.something ## (conditions for linking tables)
JOIN table3 c ON b.something = c.something
WHERE a.something = 'value'
连接 3 个表的 SELECT 语句,只需删除 SELECT 行,将单词 FROM 更改为 UPDATE,并添加一个“SET”子句来说明您想要更改的内容,即可将其转变为 UPDATE 语句。像这样:
UPDATE table1 a
JOIN table2 b ON a.something = b.something ## (conditions for linking tables)
JOIN table3 c ON b.something = c.something
SET a.variable = 'value2',
b.something = 'value3',
c.somethingelse = 'value4'
WHERE a.something = 'value';
如果需要,您可以同时更改多个字段;只需用逗号分隔每个 SET 项目。
关于php - 如何在 MYSQL UPDATE 中使用表别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802662/
我是一名优秀的程序员,十分优秀!