[英]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.