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

2つの可能性のセットで一意の行を選択する

    これはあなたが書いたものとかなり似ていますが、NOT EXISTSの方がこの場合、NOT INよりも効率的であるため、かなり高速である必要があります...

    mysql> select * from foo;
    +----+-----+
    | id | col |
    +----+-----+
    |  1 | Bar | 
    |  1 | Foo | 
    |  2 | Foo | 
    |  3 | Bar | 
    |  4 | Bar | 
    |  4 | Foo | 
    +----+-----+
    
    SELECT id
         , col
      FROM foo f1 
     WHERE col = 'Foo' 
      OR ( col = 'Bar' AND NOT EXISTS( SELECT * 
                                         FROM foo f2
                                        WHERE f1.id  = f2.id 
                                          AND f2.col = 'Foo' 
                                     ) 
         ); 
    
    +----+-----+
    | id | col |
    +----+-----+
    |  1 | Foo | 
    |  2 | Foo | 
    |  3 | Bar | 
    |  4 | Foo | 
    +----+-----+
    


    1. laravelを持っている:列が見つかりません

    2. PostgreSQLの「INSERTにはターゲット列よりも多くの式があります」を修正しました

    3. 日付をMYSQL日付形式に変換する

    4. MySQL:クエリ実行を選択すると、接続数に応じて結果のフェッチ時間が長くなります