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

値が存在しない場合にのみ行を返す

    SELECT *
    FROM reservation
    WHERE id NOT IN (select reservation_id
                     FROM reservation_log
                     WHERE change_type = 'cancel')
    

    または:

    SELECT r.*
    FROM reservation r
    LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'
    WHERE l.id IS NULL
    

    最初のバージョンの方が直感的ですが、通常、2番目のバージョンの方がパフォーマンスが向上すると思います(結合で使用される列にインデックスがあると仮定します)。

    LEFT JOINが原因で、2番目のバージョンが機能します 最初のテーブルのすべての行の行を返します。 ONの場合 条件が成功すると、これらの行には、INNER JOINと同様に、2番目のテーブルの列が含まれます。 。条件が失敗すると、返される行にはNULLが含まれます。 2番目のテーブルのすべての列。 WHERE l.id IS NULL 次に、testはそれらの行を照合するため、テーブル間で一致しないすべての行が検索されます。



    1. Postgresの配列列の各要素に関数を適用するにはどうすればよいですか?

    2. SQLServer2017でのCLRの厳格なセキュリティ

    3. SQLあいまいマッチング

    4. 別の12cオプティマイザーホワイトペーパー