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

SQL:すべての結合されたレコードが何らかの条件を満たすレコードを選択します

    相関の必要がないと仮定して、以下を使用します:

    SELECT a.*
      FROM A a
     WHERE EXISTS(SELECT NULL
                    FROM B b
                  HAVING MIN(b.some_val) > a.val)
    

    相関が必要な場合:

    SELECT a.*
      FROM A a
     WHERE EXISTS(SELECT NULL
                    FROM B b
                   WHERE b.id = a.id
                  HAVING MIN(b.some_val) > a.val)
    

    説明

    EXISTS 最初の一致に基づいてブール値で評価します。これにより、INを使用するよりも高速になり、JOINを使用する場合とは異なり、行が重複しません。 SELECT部分​​は重要ではありません-EXISTS SELECT 1/0 ...に変更できます ゼロ除算のエラーは明らかですが、クエリは引き続き機能します。

    EXISTS内のサブクエリ 集計関数MINを使用して、最小のB.some_valを取得します。その値がa.val値よりも大きい場合、a.valはすべてのb値よりも小さくなります。 WHEREの唯一の必要性 句は相関用です-集計関数はHAVINGでのみ使用できます 条項。



    1. OracleStreamsのターゲットスキーマでのテーブルのドロップの防止

    2. SQL Serverクエリでテーブル構造を表示するにはどうすればよいですか?

    3. MySQLの外部キーの基本?

    4. PostgreSQLで複数の列を更新する方法