これがきれいに見えます。実際には、そうではありません。
SELECT DISTINCT e.EmployeeID, e.LastName, e.FirstName
FROM Employees e
JOIN Orders o ON o.EmployeeID = e.EmployeeID
JOIN Customers c ON c.Country = e.Country
;
ポイントが複数の一致する行がorders
とCustomers
のために存在する場合、これらはすべてEmployee
レコードの別々のコピーが可能になりますということです合併したこれらは後にDISTINCT
によって抑制されなければならない(オプティマイザがこれをキャッチしたり、そうでないかもしれない)
点がある:あなたが唯一の従業員から列を選択しているので、あなたは、明確なを必要といけない:
:多かれ少なかれ
醜いスタイルで
SELECT e.EmployeeID, e.LastName, e.FirstName
FROM Employees e
WHERE EXISTS(
SELECT * FROM Orders o
WHERE o.EmployeeID = e.EmployeeID
)
AND EXISTS(
SELECT * FROM Customers c
WHERE c.Country = e.Country
);
あるいは、
SELECT e.EmployeeID, e.LastName, e.FirstName
FROM Employees e
WHERE EXISTS(
SELECT c.Country
FROM Orders o
JOIN Customers c
ON o.EmployeeID = e.EmployeeID
AND c.Country = e.Country
);
....「Customers」には重複する国が含まれる可能性が高いため、_a_サブクエリーが必要です。また、 'DISTINCT'が内部サブクエリにあるように、そこからデータを抜かないと、' Orders'もそこに移動したいと思うでしょう。 –
...そして 'WHERE EXISTS(SELECT ... Orders JOIN Customers ...)'の場合、サブクエリでは、従業員から選択しているだけなので、別名は必要ありません。 – wildplasser