oracle - mysql如何更新一个多表查询出来的字段
问题描述
$sql = ’SELECT c.is_check’ .’ FROM ’ . $GLOBALS[’ecs’]->table(’goods’) . ’ AS g ’ .’ LEFT JOIN ’ . $GLOBALS[’ecs’]->table(’cart’) . ’ AS c ON c.goods_id = g.goods_id ’ .’ WHERE g.enter_mode = 3105 AND c.user_id = $user_id’;
如上 sql 语句是通过 cart 表和 goods 表的一些条件查询出 cart 表中符合条件的 is_check 字段。我现在想将这个字段里的值统一更新为我前台传过来的 $is_chick,该怎么实现尼?
或者说能不能直接用 updata 语句实现尼?
问题解答
回答1:类似这样,sql语句你自己需要调试
update cart d set d.is_check = $is_chickwhere exists(SELECT 1 FROM ’ . $GLOBALS[’ecs’]->table(’goods’) . ’ AS g ’ .’ LEFT JOIN ’ . $GLOBALS[’ecs’]->table(’cart’) . ’ AS c ON c.goods_id = g.goods_id ’ .’ WHERE g.enter_mode = 3105 AND c.user_id = $user_id and c.id=d.id)回答2:
update是写锁,不建议使用复杂sql。
用你的select语句把 主键查出来放到一个list里,然后另一个update cart set ... id in (1,2,3,4) 语句去更新,如果数量大于200,请用批量更新。
回答3:update a inner join (select yy from b) c on a.id =b.id set a.xx = c.yy
把代的sql代入进去
回答4:这个是可以通过update语句实现的
update cart set is_check = value where id in ( select DISTINCT id from (你查询的条件SQL语句))回答5:
同意@seanlook 的答案,在生产环境中不要写复杂的SQL,@prolifes 的答案虽然也能达到目的,但如果在高并发和数据量大的情况下有可能造成长时间锁。
我们公司一般的做法就是先根据条件查出主键,再根据主键update对应的字段值。
回答6:这个需求可以通过 UPDATE + JOIN 实现,大概的 SQL 如下:
UPDATE goods AS gLEFT JOIN cart AS c ON c.goods_id = g.goods_id SET c.is_check=$is_checkWHERE g.enter_mode = 3105 AND c.user_id = $user_id;
具体可以看我最近写的一篇文章 https://mp.weixin.qq.com/s?__... 其中有一部分与这个问题有关
相关文章:
1. javascript - swiper.js嵌套了swiper 初始设置不能向下一个滑动 结束后重新初始2. angular.js - angular-ui-bootstrap 报错无法使用?3. 为什么span的color非要内联样式才起作用?4. python - 如何修改twisted自带的日志输出格式?5. docker - 如何修改运行中容器的配置6. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?7. 如何使用git对word文档进行版本控制?8. 请问一下各位老鸟 我一直在学习独孤九贱 现在是在tp5 今天发现 这个系列视频没有实战9. 老师,请问我打开browsersync出现这个问题怎么解决啊?10. html5 - H5做的手机分享页微信更新后,分享出去不再默认显示第一个图 作为缩略图

网公网安备