2016-09-27 30 views
2

我需要按如下方式列出客戶名稱對;在Oracle Sql上使用不同標準在同一個表上列出對

> CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME 

這樣每對顧客都有相同的郵政編碼(這也在customers表中)。

在任務有一個暗示它說

提示:您的輸出應該有四列:CUSTOMER_FIRST_NAME,CUSTOMER_LAST_NAME,CUSTOMER_FIRST_NAME,CUSTOMER_LAST_NAME

這是我至今寫的:

SELECT DISTINCT CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME 
FROM CUSTOMERS 
WHERE CUSTOMER_ZIP = CUSTOMER_ZIP 

但我不知道如何繼續,因爲我昨天才開始學習SQL。我也嘗試加入導致歧義錯誤的同一張表。

更新#1: 我已經寫了使用別名這個代碼由@ kpater87的建議

SELECT DISTINCT C1.CUSTOMER_FIRST_NAME, C1.CUSTOMER_LAST_NAME , C2.CUSTOMER_FIRST_NAME, C2.CUSTOMER_LAST_NAME 
FROM CUSTOMERS C1 
INNER JOIN CUSTOMERS C2 
ON C1.CUSTOMER_ZIP = C2.CUSTOMER_ZIP 

但是,即使我有一個不同的聲明,它會顯示重複的數據。這是預料還是我錯過了什麼?

+1

提示:'JOIN','ON'。 –

+0

'JOIN'是一個正確的方向。你能否表明你的查詢是在哪裏出現歧義錯誤?可能你錯過了列別名。 – kpater87

+0

Jojning同一張桌子是要走的路。您可能會遇到歧義錯誤,因爲查詢中有兩個表具有相同的名稱。您需要表別名,因此您可以將這兩個表實例視爲它們是不同的表。 –

回答

1

您的更新查詢看起來很好。您的查詢中唯一的問題是它將加入相同的記錄。 如果你在表的主鍵,你可以通過添加WHERE條件提高查詢:

SELECT DISTINCT C1.CUSTOMER_FIRST_NAME, 
    C1.CUSTOMER_LAST_NAME , 
    C2.CUSTOMER_FIRST_NAME, 
    C2.CUSTOMER_LAST_NAME 
FROM CUSTOMERS C1 
INNER JOIN CUSTOMERS C2 
ON C1.CUSTOMER_ZIP = C2.CUSTOMER_ZIP 
WHERE C1.PK <> C2.PK; 

PK - 是是在表的主鍵列。

如果沒有主鍵,你可以試試這個:

SELECT C1.CUSTOMER_FIRST_NAME, 
    C1.CUSTOMER_LAST_NAME , 
    C2.CUSTOMER_FIRST_NAME, 
    C2.CUSTOMER_LAST_NAME 
FROM CUSTOMERS C1 
INNER JOIN CUSTOMERS C2 
ON C1.CUSTOMER_ZIP = C2.CUSTOMER_ZIP 
WHERE C1.CUSTOMER_FIRST_NAME <> C2.CUSTOMER_FIRST_NAME 
    AND C2.CUSTOMER_LAST_NAME <> C2.CUSTOMER_LAST_NAME 

但仍然是一個問題,在您的輸出,你會得到如

Mary Smith James Bond 
James Bond Mary Smith 

要刪除的排列:

SELECT C1.CUSTOMER_FIRST_NAME, 
    C1.CUSTOMER_LAST_NAME , 
    C2.CUSTOMER_FIRST_NAME, 
    C2.CUSTOMER_LAST_NAME, 
    C1.CUSTOMER_ZIP 
FROM T_CUSTOMERS C1 
LEFT JOIN T_CUSTOMERS C2 
ON (C1.CUSTOMER_ZIP = C2.CUSTOMER_ZIP 
    AND 
    C1.CUSTOMER_NUMBER > C2.CUSTOMER_NUMBER); 

參見:SQL: self join using each rows only once

+0

歡呼的答案,但我需要擺脫排列的行。應該有11個,但有22個。所以我清楚地知道我需要什麼,但我需要擺脫排列。 – Mephistofee

+0

你有主鍵列嗎? – kpater87

+0

是的,這將是CUSTOMER_NUMBER – Mephistofee

相關問題