我必须选择一行中具有一种值但另一行中没有一种值的行,两行均具有key
实体
样品型号:
+------+---------+---------------+
| key | status | arrival_p |
+------+---------+---------------+
| k1 | failure | came |
| k1 | success | gone |
| k2 | failure | came |
| k3 | success | came |
| k3 | failure | gone |
| k4 | success | came |
| k5 | success | came |
| k2 | success | gone |
| k6 | success | gone |
+------+---------+---------------+
因此,在这种情况下,除了
k4
和k5
之外,其他所有元素都来去了。我怎样才能找到来过但没去过的人?k6
刚刚消失了,因此它是一个离群值,很好地抓住了它,但没有立即优先考虑。我试过下面的查询,但它不起作用(我知道与我的描述相匹配的实际表中的确切值,但下面的查询根本不返回任何值):
select ap1.`key`
from `arrival_pattern` ap1
left join `arrival_pattern` ap2
on ap1.`key` = ap2.`key`
where ap2.`key` is NULL
and ap1.`arrival_p` = 'came'
and ap2.`arrival_p` = 'gone'
limit 10;
任何有关我加入中可能出问题的帮助或指向正确方向的指示都将有所帮助。我在mysql上。
TIA :)
最佳答案
由于came
和gone
对于一个特定键只能出现一次,因此您最好选择一个记录存在的元素:
SELECT `key`,
COUNT(*)
FROM arrival_pattern
GROUP BY `key`
HAVING COUNT(*) = 1;
这也解决了第二个问题(“ k6刚消失”)。
另外,请注意
key
是Reserved Keyword in MySQL。您应该认真考虑将列命名为其他名称。