我試圖用下面的sql語句來查詢2個表,試圖從每個包含特定id的表中返回所有記錄。從多個表中重複SQL SELECT列而不重複數據
SELECT Phone.Phone, Email.Email FROM Contacts.Phone, Contacts.Email
WHERE Phone.ContactId = :contactId AND Email.ContactId = :contactId
Contacts.Phone
表包含2個指定編號的電話號碼和Contacts.Email
包含給定ID 1個電子郵件。使用上面的sql查詢,我得到以下行返回。當然,這僅僅是一個例子,其中每個表的結果集在行數上匹配。
Row 1: 555-555-5555 - [email protected]
Row 2: 666-666-6666 - [email protected]
電子郵件被重複,以填補在第二排,當我試圖讓:
Row 1: 555-555-5555 - [email protected]
Row 2: 666-666-6666 - NULL
我想我需要使用UNION
以某種方式加入表,但我可以不知道如何編寫sql語句。另一個選擇是執行2個單獨的SQL查詢,這將更容易,但我認爲性能明智的做法是在一個查詢中收集所需的所有數據。
我正在使用MySQL。
我想你需要'LEFT JOIN'電子郵件表。 – favoretti
@ryandlf您有一個聯繫人ID有2個(或更多)電話號碼,並且可以有一個聯繫人ID有2個(或更多)電子郵件? – Nalaka526
我想你會想要使用兩個子查詢,每個都有一些ROWNUM/rank/row_number變體,並在該字段上執行完整的外連接。對於一個特定的查詢,你必須告訴我們你正在使用的是什麼RDBMS(MySQL?Oracle?SQL Server?PostgreSQL?其他?)。這就是說,我認爲你的陳述「表現明智,最好是在一個查詢中收集我需要的所有數據」是錯誤的。一個拉* n *行的查詢優於每個拉一行的* n *查詢,但沒有理由將兩個邏輯分離的查詢合併爲一個。 – ruakh