oracle - mysql如何更新一个多表查询出来的字段
PHPz
PHPz 2017-04-17 14:51:02
0
6
671
$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 语句实现尼?

PHPz
PHPz

学习是最好的投资!

全員に返信(6)
洪涛

これに似ています、sql语句你自己调试が必要です

カートを更新 d set d.is_check = $is_chick

どこに存在しますか(
' から 1 を選択してください。 $GLOBALS['ecs']->table('goods') 。 「AS g」。
                「左結合」。 $GLOBALS['ecs']->table('cart') 。 「AS c ON c.goods_id = g.goods_id」。
                ' WHERE g.enter_mode = 3105 AND c.user_id = $user_id および c.id=d.id)
いいねを押す +0
Ty80

更新は書き込みロックであるため、複雑な SQL を使用することはお勧めできません。

select ステートメントを使用して主キーを見つけてリストに追加し、別の update car set ... id in (1,2,3,4) ステートメントを使用して、数量が 200 を超える場合は、一括更新を使用してください。

いいねを押す +0
巴扎黑

内部結合を更新します (b から yy を選択) c on a.id =b.id set a.xx = c.yy

生成された SQL を入力します

いいねを押す +0
大家讲道理

これは、update ステートメントを通じて実現できます。

カートセットの更新 is_check = value where id in (
    select DISTINCT id from (クエリの条件付き SQL ステートメント)
)
いいねを押す +0
Peter_Zhu

私は @seanlook の回答に同意します。運用環境では複雑な SQL を作成しないでください。@prolifes の回答でも目標は達成できますが、同時実行性が高く大量のデータがある場合は、長期ロックが発生する可能性があります。

当社の一般的なアプローチは、まず条件に基づいて主キーを見つけ、次に主キーに基づいて対応するフィールド値を更新することです。

いいねを押す +0
Ty80

この要件は、UPDATE + JOIN によって実現できます。おおよその SQL は次のとおりです。

UPDATE 商品 AS g
LEFT JOIN カート 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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート