查询msg表中这些行:对某个no,对应type至少存在三个值TX,RX,TR
mysql> select * from msg;
+----+----+------+
| id | no | type |
+----+----+------+
| 1 | A | TX |
| 2 | A | RX |
| 3 | A | TR |
| 4 | A | OX |
| 5 | B | TX |
| 6 | B | C |
| 7 | B | RX |
| 8 | B | XX |
| 9 | C | TX |
| 10 | B | TR |
| 11 | C | RX |
+----+----+------+
11 rows in set (0.00 sec)
mysql> SELECT * FROM msg WHERE type REGEXP 'TX|RX|TR' AND (SELECT COUNT(DISTINCT t.type) FROM msg as t WHERE t.type REGEXP 'TX|RX|TR' AND t.`no` = msg.`no`) =3;
+----+----+------+
| id | no | type |
+----+----+------+
| 1 | A | TX |
| 2 | A | RX |
| 3 | A | TR |
| 5 | B | TX |
| 7 | B | RX |
| 10 | B | TR |
+----+----+------+
6 rows in set (0.00 sec)
针对MySQL,其条件执行顺序是 从左往右,自上而下。
针对Orcale,其条件执行顺序是从右往左,自下而上。