搜尋

首頁  >  問答  >  主體

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 语句实现尼?

PHPzPHPz2786 天前669

全部回覆(6)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    類似這樣,sql語句你自己需要除錯

    update cart d set d.is_check = $is_chick
    
    where 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)

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    update是寫鎖,不建議使用複雜sql。

    用你的select語句把 主鍵查出來放到一個list裡,然後另一個update cart set ... id in (1,2,3,4) 語句去更新,如果數量大於200,請用批次更新。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:53:02

    update a inner join (select yy from b) c on a.id =b.id set a.xx = c.yy

    把代的sql代入進去

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:53:02

    這個是可以透過update語句實現的

    update cart set is_check = value where id in (
        select DISTINCT id from (你查询的条件SQL语句)
    )

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:53:02

    同意@seanlook 的答案,在生產環境中不要寫複雜的SQL,@prolifes 的答案雖然也能達到目的,但如果在高並發和數據量大的情況下有可能造成長時間鎖。

    我們公司一般的做法就是先依照條件查出主鍵,再根據主鍵update對應的欄位值。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:53:02

    這個需求可以透過 UPDATE + JOIN 來實現,大概的 SQL 如下:

    UPDATE goods AS g
    LEFT JOIN cart AS c ON c.goods_id = g.goods_id 
    SET c.is_check=$is_check
    WHERE g.enter_mode = 3105 AND c.user_id = $user_id;

    具體可以看​​我最近寫的一篇文章 https://mp.weixin.qq.com/s?__... 其中有一部分與這個問題有關

    回覆
    0
  • 取消回覆