簡體   English   中英

如何引用或將具有varchar主鍵的表與具有INT主鍵的表結合在一起(SQL Server)

[英]How to reference or join a table that has a varchar primary key with a table that has an INT primary Key (SQL server)

這是我正在使用的數據庫。

數據庫

我要做的是引用部門表或將其插入項目表。 我應該能夠成功使用以下查詢。 我需要此查詢特定結果

SELECT P.ProjectID, P.ProjectName, P.Department, D.BudgetCode
FROM DEPARTMENT D, PROJECT P

該查詢成功執行。 但是,我在結果中得到重復的值,並且其格式不正確。 這是我得到的結果

ProjectID   ProjectName                     Department      BudgetCode
1000        2010 Q3 Product Plan            Marketing       BC-300-10                     
1000        2010 Q3 Product Plan            Marketing       BC-100-10                     
1000        2010 Q3 Product Plan            Marketing       BC-400-10                     
1000        2010 Q3 Product Plan            Marketing       BC-500-10                     
1000        2010 Q3 Product Plan            Marketing       BC-800-10                     
1000        2010 Q3 Product Plan            Marketing       BC-200-10                     
1000        2010 Q3 Product Plan            Marketing       BC-700-10                     
1000        2010 Q3 Product Plan            Marketing       BC-600-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-300-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-100-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-400-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-500-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-800-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-200-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-700-10                     
1100        2010 Q3 Portfolio Analysis      Finance         BC-600-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-300-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-100-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-400-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-500-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-800-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-200-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-700-10                     
1200        2010 Q3 Tax Preparation         Accounting      BC-600-10                     
1300        2010 Q4 Product Plan            Marketing       BC-300-10                     
1300        2010 Q4 Product Plan            Marketing       BC-100-10                     
1300        2010 Q4 Product Plan            Marketing       BC-400-10                     
1300        2010 Q4 Product Plan            Marketing       BC-500-10                     
1300        2010 Q4 Product Plan            Marketing       BC-800-10                     
1300        2010 Q4 Product Plan            Marketing       BC-200-10                     
1300        2010 Q4 Product Plan            Marketing       BC-700-10                     
1300        2010 Q4 Product Plan            Marketing       BC-600-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-300-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-100-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-400-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-500-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-800-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-200-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-700-10                     
1400        2010 Q4 Portfolio Analysis      Finance         BC-600-10   

我需要得到這個結果

在此處輸入圖片說明

我嘗試使用JOIN:

SELECT P.ProjectID, P.ProjectName, P.Department, D.BudgetCode
FROM DEPARTMENT D
RIGHT JOIN PROJECT P ON P.ProjectID = D.DepartmentName

但出現轉換錯誤

將varchar值“ Accounting”轉換為數據類型int時,轉換失敗。

我認為這是因為不可能將varchar轉換為int。 除非演員陣容可行...

SELECT P.ProjectID, P.ProjectName, P.Department, D.BudgetCode
FROM DEPARTMENT D
RIGHT JOIN PROJECT P ON cast(P.ProjectID AS varchar) = D.DepartmentName

使用演員表,我得到了這個結果

ProjectID   ProjectName                     Department      BudgetCode
1000        2010 Q3 Product Plan            Marketing       NULL
1100        2010 Q3 Portfolio Analysis      Finance         NULL
1200        2010 Q3 Tax Preparation         Accounting      NULL
1300        2010 Q4 Product Plan            Marketing       NULL
1400        2010 Q4 Portfolio Analysis      Finance         NULL

這幾乎是我一直在尋找的東西,但是它為我的BudgetCodes顯示NULL值,這是不正確的。 它們不是空值。

所以在這一點上,我沒有想法。 (作為一個旁注,我知道在我的數據庫中,我有一個varchar作為主鍵,並且我試圖將該主鍵與一個int的主鍵進行聯接。如果它們的類型相同,請確定我的加入本來可以)

如果Project.Department是Department.DepartmentName的功能鍵,則可以通過該鍵加入。

JOIN Project P ON P.Department = D.DepartmentName

如果不是,則需要查看在Project和Department這兩個表之間共享哪個列,並通過該列鏈接兩個表。 共享列在兩個表上必須具有相同的數據類型。

另一個技巧是,您要查詢Department和JOIN Projects,同時,您僅使用Department中的BudgetCode,其余的都來自Project。 在這種情況下,您需要查詢Project和JOIN Department。

SELECT 
    P.ProjectID, 
    P.ProjectName, 
    P.Department, 
    D.BudgetCode
FROM PROJECT P
INNER JOIN DEPARTMENT D ON D.DepartmentName = P.Department

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM