mysql选择匹配多行

时间:2012-10-19 00:26:30

标签: mysql select

我有一张看起来像的桌子。

user    project
----    -------
bob     news
bob     theatre
sarah   news
fred    news
fred    fred
fred    movies
sarah   movies

如果用户从不 fred

,我正在尝试提取项目列表

所以基于上表的结果是。

bob theatre 

我对如何实现这一点感到难过。我在另一个可以加入的表中有一个唯一的用户列表。我可以用某种语言的for循环来做到这一点,但我认为必须有一种方法在本机sql中执行此操作。

2 个答案:

答案 0 :(得分:0)

select distinct a.* 
from mytable a
left join mytable b on b.project = a.project and b.user = 'fred'
where b.user is null

对于您想要的行,将不会成为连接行,并且此类行将具有null值,因此where子句仅过滤掉那些。

答案 1 :(得分:0)

实现这一目标的最简单方法可能是在WHERE语句中使用NOT EXISTS运算符;类似的东西:

Select P.* from Projects P Where NOT EXISTS (Select * from Projects P2 where P2.project = P.project and P2.user = 'fred')

第二种可能性是使用NOT IN运算符:

Select P.* from Projects P Where P.project NOT IN (Select P2.project from Projects P2 where P2.user = 'fred')

这适用于Microsoft SQL-Server;但是,这应该在MySQL上不加修改。