2017-09-30 77 views
0

假設我有以下SQL表employee,並且想回答「與Joe(除Joe本人之外)位於同一位置的問題?」使用自聯接:如何篩選SQL中自聯接中的WHERE語句中所需的值

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

要回答這個問題,我可以這樣寫:

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語句來得到這樣的結果?不知道是否有辦法。

+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'