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

UPDATEのFROM側は、UPDATEの対象となるテーブルとどのように関連していますか?

    UPDATE 表示するクエリは次とまったく同じです:

    UPDATE fromemailaddress f
    SET    call = true 
    FROM  (
       SELECT fromemailaddress
       FROM   email 
       WHERE  subject ILIKE '%tester%'
       ) e
    WHERE  e.fromemailaddress = f.fromemailaddress;
    

    subject ILIKE '%tester%' subject ~ 'tester'と同等の高速です 。 LIKEの詳細 、ILIKE および正規表現マッチング(~マニュアル またはdba.SEのこの関連する回答:

    そして効果的に と同じ:

    UPDATE fromemailaddress f
    SET    call = true
    WHERE  EXISTS (
       SELECT 1
       FROM   email e
       WHERE  e.fromemailaddress = f.fromemailaddress
       AND    e.subject ILIKE '%tester%'
       );
    

    代わりにこれを使用してください。

    テーブルemailに複数の行がある場合 同じfromemailaddress fromemailaddressの行と一致する 、このフォームは1つのみ実行されます 不幸なオリジナルとは異なり、行ごとに更新します。

    fromemailaddressという事実に惑わされないでください ここでは列およびテーブル名として使用されます。

    マニュアルを注意深くお読みくださいこちら およびこちら 。特にこのビット:



    1. SpringBootでHibernateを使用してPostGISジオメトリポイントフィールドをマッピングします

    2. COUNT(*)GROUP BYがある場合とない場合、一致する行はありません

    3. MySQL:BEGIN&COMMITを使用して同じクエリで複数のテーブルに挿入します

    4. MySQLテーブルからデータのすべての組み合わせを取得するにはどうすればよいですか?