2011-05-27 51 views
0

我想知道如何查詢沒有主鍵鏈接的兩個表。這些表來自同一個數據庫,我需要將treenotediscription與employeeid相匹配,所以當我收到大量重複和不真實的值時,結果會恢復正常,我認爲這是因爲沒有鏈接。任何幫助將不勝感激,歡呼一切!加入兩個表,沒有鏈接 - 即在SQL Server Management Studio中的主鍵

SELECT DISTINCT 
    EMPLOYEE.EMPLOYEECODE, 
    TREENODEDESCRIPTION.TREENODEDESCRIPTION2 
FROM   
    EMPLOYEE 
CROSS JOIN 
    TREENODEDESCRIPTION 
ORDER BY 
    EMPLOYEE.EMPLOYEECODE 
+2

爲什麼使用交叉連接? – varadarajan 2011-05-27 09:07:45

+0

我正在使用交叉連接,因爲DBMS不允許我使用其他類型的連接。我很快就在設計查詢編輯器中創建了它,並提出了相同的連接? – Tyrone2011 2011-05-27 09:22:02

+1

請勿使用查詢設計器。只需點擊新建查詢,然後在編輯窗口中輸入查詢。 – sqlvogel 2011-05-27 09:27:42

回答

0

首先,有沒有要求對列的關係鏈接進行連接。連接基於布爾條件。如果布爾條件爲真,則發生連接。

這就是說,我懷疑你真正的問題在於你正在使用的連接類型。 CROSS JOIN將參加雙方每場比賽對陣其他所有比賽。根據你之後的情況,你更可能需要INNER或LEFT加入。

1

CROSS JOIN在一個表中的每個單個記錄被連接到另一個表中的每個記錄。如果每個表格有10條記錄,則會產生100個結果匹配。

更常見的連接是INNER JOIN ...

SELECT DISTINCT 
    employee.EmployeeCode, 
    TreeNodeDescription.TreeNodeDescription2 
FROM 
    Employee 
INNER JOIN 
    TreeNodeDescription 
    ON Employee.EmployeeID = TreeNodeDescription.TreeNodeDescription2 

您指定要如何給自己的關聯表,外或主鍵是否存在等不自動完成這個。它們只是用來對數據庫執行某些規則,以使其保持一致的狀態。

+0

你們很好!上面的查詢可以工作,但它可能是我的數據庫有錯,它沒有返回任何值:( – Tyrone2011 2011-05-27 09:28:04

+0

正如你所說的,可能是EmployeeID中的值與TreeNodeDescription2中的值不匹配。 – MatBailie 2011-05-27 09:31:40

+1

@ Tyrone2011:你可以替換INNER JOIN如果它們匹配,它們將出現在同一行上,如果沒有,那麼其中一列將包含NULL,如果確實沒有匹配在兩個表之間,所有行將包含一個值和一個NULL,但至少您會有機會看到您的眼睛爲什麼沒有匹配。 – 2011-05-27 13:43:29

0

只需加入公共領域 - 不需要FK或其他關係!

SELECT DISTINCT 
    e.EmployeeCode, 
    t.TreeNodeDescription2 
FROM   
    dbo.Employee e 
INNER JOIN 
    dbo.TreeNodeDescription t ON e.EmployeeID = t.TreeNodeScription 
ORDER BY 
    e.EmployeeCode 
相關問題