Mysql 选择仅具有一种值而缺少另一种值的行

Mysql 选择仅具有一种值而缺少另一种值的行,mysql,sql,Mysql,Sql,我必须选择一行中有一种值但另一行中没有的行,这两行都有一个键公共实体 示例模型: +------+---------+---------------+ | key | status | arrival_p | +------+---------+---------------+ | k1 | failure | came | | k1 | success | gone | | k2 | failure | came |

我必须选择一行中有一种值但另一行中没有的行,这两行都有一个
公共实体

示例模型:

+------+---------+---------------+
| 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
刚刚消失,所以它是一个异常值,很好地捕捉到它,但不是立即的优先级

我尝试了下面的查询,但不起作用(我知道实际表中的确切值与我的描述匹配,但下面的查询根本不返回值):

任何关于我的连接中可能出现错误的正确方向的帮助或指针都是有帮助的。我在mysql上


TIA:)

使用
不存在

select t1.* from  arrival_pattern t1
where not exists ( select 1 
                   from arrival_pattern t2 
                   where t2.key=t1.key 
                         and t2.arrival_p='gone')
你可以试试下面的自我连接

select t1.* arrival_pattern t1 
 left join 
(select key from 
  arrival_pattern t2 where arrival_p='gone'
) t2
 on t1.key=t2.key where t2.key is null 

使用
不存在

select t1.* from  arrival_pattern t1
where not exists ( select 1 
                   from arrival_pattern t2 
                   where t2.key=t1.key 
                         and t2.arrival_p='gone')
你可以试试下面的自我连接

select t1.* arrival_pattern t1 
 left join 
(select key from 
  arrival_pattern t2 where arrival_p='gone'
) t2
 on t1.key=t2.key where t2.key is null 

由于对于特定键,
来了
去了
只能出现一次,因此您最好选择存在单个记录的元素:

SELECT   `key`,
         COUNT(*)
FROM     arrival_pattern
GROUP BY `key`
HAVING   COUNT(*) = 1;
这也解决了第二个问题(“k6刚刚消失”)


另外,请注意,
是一个<强>您应该认真考虑将您的列命名为其他内容。

< p>因为<<代码> < < />代码>和<>代码> >对于特定键只能出现一次,您还可以选择单个记录存在的元素:

SELECT   `key`,
         COUNT(*)
FROM     arrival_pattern
GROUP BY `key`
HAVING   COUNT(*) = 1;
这也解决了第二个问题(“k6刚刚消失”)



另外,请注意,
是一个<强>你应该认真考虑将你的列命名为其他东西。< /强> < /p>使用<代码>连接< <代码>??@ NOOBEdStudio:是的,你可以使用自己。join@NoobEditor如果子查询返回一条或多条记录,则Actual EXISTS运算符返回true,因此我选择常量值1,而不是任何列选择,您可以读取sql how EXISTS的文档使用
联接的任何方式工作
??@NoobEditor是的,您可以使用selfjoin@NoobEditor如果子查询返回一个或多个记录,则Actual EXISTS运算符将返回true,因此我选择常量值1,而不是任何列选择。您可以读取sql文档如何存在
arrival\p
的可能值是独占的
Comed
消失了
?对于每个键,最多有一条到达的记录,最多有一条到达的记录?是的,先生…这是一个
enum
from代码,可能只有
come/gone
的值,
key+arrival\u p
具有唯一约束
arrival\u p
的可能值是唯一的
come
gone
?对于每个键,最多有一条到达的记录,最多有一条到达的记录?是的,先生…这是一个
enum
源代码,只有可能的值
come/gone
key+arrival\p
对HH Maannn有唯一的约束…有时过度思考会扼杀简单的解决方案,这是干净的+1@NoobEditor还需要注意的是,
key
在MySQL中是一个保留关键字。你应该认真考虑把你的专栏命名为别的东西。@ MaHubHury:这只是一个参考模式伙伴,不要按我的网名,我不是NoOB!D@NoobEditor ;) 好吧,我不是一个心灵感应者:如果任何键只包含“去了”,那么该键也会在这个查询中返回,但是如果你的真实数据像示例一样,我认为也不例外,那么它会很好地工作哦,Maannnnn…有时过度思考会扼杀简单的解决方案,这是干净的+1@NoobEditor还需要注意的是,
key
在MySQL中是一个保留关键字。你应该认真考虑把你的专栏命名为别的东西。@ MaHubHury:这只是一个参考模式伙伴,不要按我的网名,我不是NoOB!D@NoobEditor ;) 好吧,我不是一个心灵感应者:如果任何键只包含“去了”,那么该键也会在这个查询中返回,但如果您的真实数据像示例一样,我认为没有例外,那么它会工作得很好