3

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

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

如果用户永远不会,我正在尝试提取项目列表 fred

所以基于上表的结果将是。

bob theatre 

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

4

2 回答 2

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 上未经修改地运行。

于 2012-10-19T00:46:25.183 回答
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 子句仅过滤掉那些。

于 2012-10-19T00:29:32.817 回答