0

私は次の(要約スキーマ)を持っています-3つのテーブル-user、job、job_type

TABLE: job_type
COLUMN: job_type_id
1           
2

TABLE: user
COLUMN: user_id
101
102
103

TABLE: job
COLUMNS: job_id | user_id | job_type_id
              4 |     101 |           1
              5 |     101 |           2
              6 |     102 |           1
              7 |     103 |           2

job_type_id = 1のジョブテーブルにジョブがあるすべてのユーザーを返すクエリを作成したいのですが、job_type_id = 2のジョブもある場合は、結果から除外します。したがって、ターゲット結果セットはユーザー102のみを返す必要があります。

4

3 に答える 3

2
select *
  from user u
 where exists (select * from job j
                where j.user_id=u.user_id
                  and j.job_type_id=1)
   and not exists (select * from job j
                    where j.user_id=u.user_id
                      and j.job_type_id=2)
于 2012-12-05T20:11:24.200 に答える
1

使用している DBMS を示していませんが、ほぼすべての DBMS で機能するはずのクエリを次に示します。

SELECT DISTINCT user_id
  FROM job j1
 WHERE job_type_id = 1
   AND NOT EXISTS
        ( SELECT 1
            FROM job j2
           WHERE job_type_id = 2
             AND j2.user_id = j1.user_id
        )
;

SELECT DISTINCT user_id
  FROM job
 WHERE job_type_id = 1
   AND user_id NOT IN
        ( SELECT DISTINCT user_id
            FROM job
           WHERE job_type_id = 2
        )
;

SELECT DISTINCT j1.user_id
  FROM job j1
  LEFT
 OUTER
  JOIN job j2
    ON j1.user_id = j2.user_id
   AND j1.job_type_id = 1
   AND j2.job_type_id = 2
 WHERE j2.user_id IS NULL
;

一部の DBMS は、使用できる特別な機能を提供しMINUSています。EXCEPTそれは次のようになります。

SELECT user_id
  FROM job
 WHERE job_type_id = 1
MINUS                          -- or EXCEPT
SELECT user_id
  FROM job
 WHERE job_type_id = 2
;
于 2012-12-05T20:14:07.697 に答える
0

試す:

Select * from
user U inner join Job J
on 
  J.user_id = U.user_id
inner join job_type T
on 
  T.job_type_id = 1
Where 
T.job_type_id <> 2
于 2012-12-05T20:14:39.900 に答える