Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswählen eindeutiger Zeilen in einem Satz von zwei Möglichkeiten

Dies ist ziemlich ähnlich zu dem, was Sie geschrieben haben, sollte aber ziemlich schnell sein, da NOT EXISTS in diesem Fall effizienter ist als 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 | 
+----+-----+