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
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 に答える
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')

2 番目の可能性は、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 に答える