2016-11-21 4 views
1

私はテーブルEmpTraitsと従業員のリストとその特性を持っています。したがって、この表には各従業員とすべての特性(従業員は特性が異なる限り複数回リストされる可能性があるため、この表には同じ従業員と同じ特性の2つのレコードが含まれていません)がリストされます。特定の5つの特性を持つ従業員のリストを取得するにはどうすればよいですか?

`Table: EmpTraits 
+------------+---------+ 
| EmployeeID | TraitID | 
+------------+---------+` 

のは、私はちょうど従業員Xは、(5の合計である)を持つすべての特徴を示していますEmpXTraits(従業員X上の特徴)と呼ばれるVIEWを持っているとしましょう。この2つのテーブルから

`Table: EmpXTraits 
+------------+---------+ 
| EmployeeID | TraitID | 
+------------+---------+ 
|  X  + 1 + 
|  X  + 2 + 
|  X  + 3 + 
|  X  + 4 + 
|  X  + 5 + 
+------------+---------+` 

、私はVIEW EmpXTraitsに示した特性のすべてを持っているすべてのEmployeeIDsの一覧を照会しようとしています。

これまでの質問はありますが、問題は、従業員Xと同じ特徴を持つ従業員を示していることです。他の従業員に類似した特性がすべてある場合は、表示されません。

` 
SELECT DISTINCT EmpTraits.EmployeeID 
FROM EmpTraits INNER JOIN EmpXTraits ON 
     EmpTraits.EmployeeID = EmpXTraits.EmployeeID 
WHERE EmpTraits.TraitID IN (
     SELECT EmployeeID 
     FROM EmpXTraits 
);` 

私は従業員Xから少なくとも特徴を持っているすべての従業員を表示するには、このクエリを変更することができますどのように任意のアイデアは、(彼らがいる限り、彼らは従業員Xが持つすべての特性を持っているとして、より多くの特徴を持つことができます)。

ありがとうございました!

+1

必要な関係演算子が[リレーショナル部門](https://www.simple-talk.com/sql/t-sqlとして知られています-programming/divided-we-stand-sql-of-relational-division /)を使用します。 – onedaywhen

答えて

2

以下を試してください。 (形質がEmpXTraitsしているどのように多くの手前に知っておく必要はありませんんが)

SELECT DISTINCT ee.EmployeeID 
    FROM EmpTraits AS ee 
WHERE NOT EXISTS (SELECT x.TraitID FROM EmpXTraits AS x 
        EXCEPT 
        SELECT e.TraitID FROM EmpTraits AS e 
        WHERE e.EmployeeID = ee.EmployeeID); 
+0

ありがとう!これは私の期待どおりに機能しました。私は今までEXCEPT機能を認識していなかったので、その点についてもありがとう。 – MR04

1
SELECT EmpTraits.EmployeeID, Count(EmpTraits.TraitID) 
FROM EmpTraits 
INNER JOIN EmpXTraits ON EmpTraits.EmployeeID = EmpXTraits.EmployeeID 
Group BY EmpTraits.EmployeeID 
Having Count(EmpTraits.TraitID) > 4 

これはトリックを行うと思います。

+0

ミスターポジティブ、残念ながら、これは私が期待したとおりに動作しません。 wdosanjosは素晴らしいソリューションを提供しました。 – MR04

関連する問題