2017-09-30 10 views
0

次のSQLテーブルemployeeを持っていて、「Joeと同じ場所に住んでいる人は誰ですか?使用して自己の参加:SQLのセルフ・ジョインでWHERE文に必要な値をフィルタする方法

SELECT employee_name 
FROM (
SELECT DISTINCT e1.name as employee_name 
FROM employee e1 
JOIN employee e2 ON e1.location = e2.location 
WHERE e2.name = "Joe" 
) 
WHERE employee_name <> "Joe" 

一つだけSELECTステートメントを使用して、この結果を取得する方法があります:

| name | location | 
|---------|-----------| 
| Joe  | New York | 
| Sunil | India  | 
| Bob  | New York | 
| Melissa | Kentucky | 

私は書くことができます質問に答えるために?方法があるかどうかはわかりません。

+3

「e1.name <> e2.name」を結合条件に追加します。 –

答えて

1

あなたはWHERE句に余分な条件と結果の結合されたテーブルから「ジョー」を除外することができます。

SELECT DISTINCT e1.name as employee_name 
FROM employee e1 
JOIN employee e2 ON e1.location = e2.location 
WHERE e2.name = "Joe" 
    AND e1.name <> "Joe" -- remove row where "Joe" matches to "Joe" 
+0

これはうまくいきますが、 'e1.name <> e2.name'を使用するのは私の考えでは人間が読むことができます –

0

は、相関副問合せを行います。コード上の謝罪、私は私のiPhoneでこれをやっています。

SELECT DISTINCT NAME FROM EMPLOYEE 
WHERE NAME IN ( 
     SELECT DISTINCT LOCATION FROM EMPLOYEE 
     WHERE NAME = 'Joe') 
And name != 'Joe' 
関連する問題