首先,我想说,如果在阅读完问题之后,任何人都有关于此问题的更多信息标题的建议,请告诉我我认为我是有所欠缺,目前,企业...mysql - 选择不同的互斥(基于另一列的值)行
鉴于这种表结构:
+---------+-------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| account | varchar(20) | YES | UNI | NULL | |
| domain | varchar(100) | YES | | NULL | |
| status | enum('FAILED','PENDING','COMPLETE') | YES | | NULL | |
+---------+-------------------------------------+------+-----+---------+----------------+
而这个数据:
+----+---------+------------------+----------+
| id | account | domain | status |
+----+---------+------------------+----------+
| 1 | jim | somedomain.com | COMPLETE |
| 2 | bob | somedomain.com | COMPLETE |
| 3 | joe | somedomain.com | COMPLETE |
| 4 | frank | otherdomain.com | COMPLETE |
| 5 | betty | otherdomain.com | PENDING |
| 6 | shirley | otherdomain.com | FAILED |
| 7 | tom | thirddomain.com | FAILED |
| 8 | lou | fourthdomain.com | COMPLETE |
+----+---------+------------------+----------+
我想选择素t所有帐户(行)都具有“完成”状态的所有域。
任何具有包含状态'COMPLETE'的任何值的行的域都不能返回。
所以在上面的例子中,我预期的结果将是:
+------------------+
| domain |
+------------------+
| somedomain.com |
| fourthdomain.com |
+------------------+
很显然,我可以做到这一点通过使用子查询,如:
mysql> select distinct domain from test_table where status = 'complete' and domain not in (select distinct domain from test_table where status != 'complete');
+------------------+
| domain |
+------------------+
| somedomain.com |
| fourthdomain.com |
+------------------+
2 rows in set (0.00 sec)
这将工作罚款我们的小型模拟测试表,但在实际情况下,所讨论的表格将是数十(甚至数百)万行,并且我很好奇,是否有一些更有效的方式来做到这一点,例如子查询是缓慢和密集的。
非常好!这正是我所需要的。 – 2013-03-25 13:59:35
请在你的回答中看到我的评论。 – 2013-03-25 14:08:33
+1显然执行v。,并且很甜/很容易启动。好一个。 – Sepster 2013-03-25 14:13:40