sql >> データベース >  >> RDS >> PostgreSQL

左結合からのPostgresの更新

    この更新クエリをSQLサーバー形式からPostgreSQLに変換する一般的な方法は次のとおりです。

    UPDATE Users
     SET bUsrActive = false
    WHERE
     ctid IN (
       SELECT u.ctid FROM Users u
          LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = 1 AND u2.bUsrActive = 1
        WHERE u.bUsrAdmin = 0 AND u.bUsrActive = 1 AND u2.nkUsr IS NULL
    )
    

    ctid 行の一意の場所を指す疑似列です。テーブルに主キーがある場合は、代わりに主キーを使用できます。

    更新されたテーブルUsersのため、質問のクエリ#2は期待どおりに機能しません 同じテーブルに結合されることはありませんUsers u FROM句で。 FROM句にテーブル名を2回入力した場合と同様に、テーブル名は暗黙的に結合またはバインドされないため、2つの独立した行のセットと見なされます。



    1. MySqlCommandを使用してストアドプロシージャを実行するときのSqlNullValueException

    2. RODBC odbcDriverConnect()接続エラー

    3. foreachループの代わりにmysqlphp関数を結合します

    4. 労働時間を保存し、効率的に照会するための最良の方法