別のテーブルの2つの他の列に基づいてテーブルの一部の行を更新しようとしています。おもちゃモデルとして、2つのテーブルを考えてみましょう。first_name、last_name、has_licenseという列を持つPeople。 first_nameとlast_nameという列のドライバ。今、最初のテーブルを更新して、ドライバテーブルにもあるfirst_nameとlast_nameのすべてのタプルに対してhas_license = 'Y'を更新します。複数の列条件に基づいて行を更新する
私は何ができる:
UPDATE people SET has_license='Y'
WHERE first_name + last_name IN (SELECT first_name + last_name FROM drivers)
(私の実際のクエリ、FIRST_NAMEとLAST_NAMEで外部レコードセットのIDと日付で、サブクエリはexcept節/参加を含む、より複雑です。)
値が不明です。値によってはエラーが発生する可能性があります。理想的には、SQLのタプルを次のように作成できます。
UPDATE people SET has_license='Y'
WHERE (first_name, last_name) IN (SELECT first_name, last_name FROM drivers)
これは無効なSQL(SQLiteによる)です。それで、私も可能にしたいのですか?
(もう一つの問題は、テーブルのどれも任意の主キー、特にいない単一列のものを持っていないことである。それが当てはまらないならば、私は単に行を識別するためにそれを使用する。)
AFAICT、標準SQLでは、UPDATEステートメントにFROM句がありません。 sqlite、Oracle(本番データベース)、オンラインで見つけられるSQLガイドではありません。 (結合の結果は一時的なもので、永久的なものを更新する必要があるため、意味があります) – AFoglia
これはSQL Serverにあります。私はあなたのSQLite構文を調査してみましょう。 – JNK
'EXISTS'を使ってバージョンを投稿しますが、あなたの実装で動作するかどうか教えてください。 – JNK