0

例えば

デパートメント

id  departmentname
1     x
2     y
3     z

従業員

fkdepartmentid empname
         1      john
         1      sam
         2      ram
         3      hari    

ここでは、任意の数のsempnameに属することができます。department

私の要件は、 (結合を使用して)departmentテーブル whereからすべての部門を取得することです。empname!=john

次のクエリで試しました:

SELECT d.id FROM department d
 INNER JOIN employee e ON d.id=e.fkdepartmentid
  WHERE((e.empname<>'1')OR d.id IN (SELECT DISTINCT fkdepartmentid FROM employee WHERE fkdepartmentid NOT IN (SELECT DISTINCT fkdepartmentid FROM employee WHERE empname=sam)) ) GROUP BY d.id

ただし、クエリは遅く、一部のシナリオでは失敗します。結果は 2 と 3 になるはずです。これらの結果を得るにはどうすればよいですか?

4

3 に答える 3

0

正しく理解している場合、Jhon はその部門の雇用主であるため、部門 1 を除外します。その場合は、条件を逆にする必要があります。

試す

SELECT * 
  FROM department
 WHERE id NOT IN
( 
  SELECT fkdepartmentid 
    FROM employee 
   WHERE empname = 'john' 
   GROUP BY fkdepartmentid
)

出力:

| | ID | 部門名 |
-----------------------
| | 2 | y |
| | 3 | z |

これがSQLFiddleのデモです

于 2013-06-13T09:35:03.150 に答える