は、従業員が同時に1つまたは複数のジョブを実行することができますので、データベースは次のように構成されています結合と一致するレコード以外のレコードの選択方法は?当社のWebアプリケーションで
http://rextester.com/VTFND62465
テーブルtma_employee
:
emp_id | emp_name
-------|---------
1 | BOB
2 | MAX
3 | SALLY
テーブルtma_job
:
job_id | job_name
-------|---------
1 | DEV
2 | SALES
3 | MGMT
従業員と仕事の関係表tma_employee_job
:
emp_id | job_id
-------|-------
1 | 1
1 | 2
2 | 2
2 | 3
3 | 3
3 | 1
、一つ以上の特定のジョブを実行するすべての従業員を選択することは簡単です:
SELECT DISTINCT E.*
FROM tma_employee E
JOIN tma_employee_job EJ USING (emp_id)
JOIN tma_job J USING (job_id)
WHERE J.job_name = 'DEV';
しかし、どのように私はないを行うすべての従業員がいることを実行する選択することができますジョブ?
私はこのような状態を反転しようとした:
SELECT DISTINCT E.*
FROM tma_employee E
JOIN tma_employee_job EJ USING (emp_id)
JOIN tma_job J USING (job_id)
WHERE J.job_name != 'DEV';
しかし、これは動作しません。例えば、BOBはDEVと違って、販売の仕事でもあるので、従業員BOBがから発見された、ので、上記のクエリ。また、私は、これが機能することを発見した
:メインクエリはに基づいて、機能によって構築されているので、
SELECT DISTINCT E.*
FROM tma_employee E
WHERE E.emp_id NOT IN (
SELECT EJ.emp_id
FROM tma_employee_job EJ
JOIN tma_job J USING (job_id)
WHERE J.job_name = 'DEV'
);
はしかし、それは、私が避けたいサブクエリを使用するように私を必要とし受信するパラメータは、SELECT E.* FROM tma_employee E
から始まり、さまざまなJOINSおよび句をすべて追加します。
サブクエリを使用するクエリと同じ結果を得ることは可能ですか?単純なジョインに固執しますか?
SELECT DISTINCT E.*
FROM tma_employee E
LEFT JOIN (
SELECT EJ.emp_id
FROM tma_employee_job EJ
JOIN tma_job J USING (job_id)
WHERE J.job_name = 'DEV'
) T ON E.emp_id = T.emp_id
WHERE T.emp_id IS NULL
私はあなたがそれを釘付けにしたと思います! –
これは正しく動作すると思われ、クエリビルダ機能で管理するのは簡単です...私はできるだけ早く試してみます。 –