一直用MS-SQL,现在有个MYSQL的语法问题。。。。

jmx123456789 2016-04-06 09:34:43
很少用到MYSQL 这里有个语法问题需要大虾们帮帮忙:



UPDATE ecs_users SET `status` = 1
WHERE user_id IN(
SELECT DISTINCT t1.user_id FROM ecs_users t1
LEFT JOIN ecs_user_account t2 ON t1.user_id = t2.user_id
WHERE (t2.add_time IS NULL AND t1.reg_time + 180 > NOW()) OR
(t2.add_time IS NOT NULL AND t2.add_time + 180 > NOW())
)


[Err] 1093 - You can't specify target table 'ecs_users' for update in FROM clause


/* 该语句测试通过,可能返回NULL值 */
SELECT DISTINCT t1.user_id FROM ecs_users t1
LEFT JOIN ecs_user_account t2 ON t1.user_id = t2.user_id
WHERE (t2.add_time IS NULL AND t1.reg_time + 180 > NOW()) OR
(t2.add_time IS NOT NULL AND t2.add_time + 180 > NOW())


PS:MYSQL板块人气不如咱这边 所以在这边也来一贴~~~~
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmx123456789 2016-04-06
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
引用 2 楼 KanzakiOrange 的回复:
谢过~~~
中国风 2016-04-06
  • 打赏
  • 举报
回复
UPDATE ecs_users t1 LEFT JOIN ecs_user_account t2 ON t1.user_id = t2.USER_ID SET t1.status = 1 WHERE (t2.add_time IS NULL AND t1.reg_time + 180 > NOW()) OR (t2.add_time IS NOT NULL AND t2.add_time + 180 > NOW()) 更新列加上表别名
Ginnnnnnnn 2016-04-06
  • 打赏
  • 举报
回复
mysql 的语法要改成这样
UPDATE ecs_users a inner join (SELECT DISTINCT t1.user_id FROM ecs_users t1
    LEFT JOIN ecs_user_account t2 ON t1.user_id = t2.user_id
    WHERE (t2.add_time IS NULL AND t1.reg_time + 180 > NOW()) OR
                (t2.add_time IS NOT NULL AND t2.add_time + 180 > NOW())) b on a.user_id  = b.user_id
SET a.`status` = 1
中国风 2016-04-06
  • 打赏
  • 举报
回复
这样试试
UPDATE ecs_users t1
    LEFT JOIN ecs_user_account t2 ON t1.user_id = t2.USER_ID
SET status = 1
    WHERE (t2.add_time IS NULL AND t1.reg_time + 180 > NOW()) OR
                (t2.add_time IS NOT NULL AND t2.add_time + 180 > NOW())
1、支持绝大部分数据库,包括 大型数据库Oracle,Sybase(包括SQL AnyWhere),DB2,MS_SQL 中型数据库MS_Access,MySQL 桌面型数据库Paradox,DBF系列数据库,MS_Execl,Text 其他支持SQL 92标准的数据库 2、数据库的连接采用ADO连接,因此无需安装和卸载 3、支持SQL查询语句绝大部分语法 3.1 选择字段 3.1.1 Select [All] [Distinct]; 3.1.2 特殊语法,记录条数限定Top(MS_SQL),Rownum(Oracle), Limit(MySQL),Set RowCount(Sybase)) 3.1.3 字段表达式或者计算字段 3.2 选择表 (From) 3.3 条件筛选 (Where) 3.4 分组 (Group By) 3.5 组内条件 (Having) 3.6 排序 (Order By) 3.7 数据表的内连接、外连接 3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,Sybase),(+)(Oracle) 3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL子查询表,内嵌SQL子句 4、粘贴字段、系统函数 5、SQL查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到的所有SQL语法 6、SQL文件拖放,然后反向分析 7、数据库视图创建和重建(目前仅支持Oracle,Sybase,MS_SQL) 8、附加Delphi 5和Delphi 6的控件包,支持Delphi 5,6开发环境 9、SQL语句智能换行 10、其他功能 10.1 SQL文件保存、打开 10.2 支持多个数据库连接 10.3 SQL语句关键词高亮度显示 10.4 简单SQL查询语句转换为Delete,Update,Insert语句

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧