[英]I need to select same column name twice having deferent values based on another table
[英]SQL Select - Return same column twice based on IDs in another table
假設我有下面的表( ID
和ID2
分別是PK / FK),我將如何設計一個查詢,該查詢將兩次拔出detailTable.name
列,一次用於第一個表中的每個ID
?
我想要的結果集如下所示:
+------+--------+------+---------+
| Name | Name 2 | Code | Created |
+------+--------+------+---------+
| Dave | Steven | AAAA | 1/10/10 |
+------+--------+------+---------+
我嘗試使用兩個聯接來執行此操作,但始終收到此錯誤:
SELECT
DT.name as [Name 1],
DT.name as [Name 2]
--other columns would go here
FROM linkTable LT
LEFT JOIN
detailTable DT
ON LT.id2 = DT.id
LEFT JOIN
linkTable LT2
ON LT2.id = DT.id
where DT.id = '74'
錯誤:將數據類型nvarchar轉換為bigint時出錯
linkTable
+-----+-------+--------+-------------------------+-----------+
| ID | ID2 | Code | Created | CreatedBy |
+-----+-------+--------+-------------------------+-----------+
| 76 | 15157 | AAAA | 1/1/10 | 844 |
+-----+-------+--------+-------------------------+-----------+
| 77 | 15340 | AAAA | 2015-11-24 15:12:25.057 | 842 |
+-----+-------+--------+-------------------------+-----------+
| 94 | 14644 | GEOFA | 2015-11-13 15:01:19.977 | 842 |
+-----+-------+--------+-------------------------+-----------+
| 94 | 16346 | XX2222 | 2015-11-13 15:01:57.290 | 842 |
+-----+-------+--------+-------------------------+-----------+
| 108 | 15966 | EMPE | 2015-11-25 12:38:37.377 | 842 |
+-----+-------+--------+-------------------------+-----------+
detailTable
+-------+----------+
| ID | Name |
+-------+----------+
| 76 | Dave |
+-------+----------+
| 15157 | Steven |
+-------+----------+
| 94 | Roger |
+-------+----------+
| 108 | Geoff |
+-------+----------+
| 16346 | Penelope |
+-------+----------+
| 15966 | Paul |
+-------+----------+
| 77 | Michael |
+-------+----------+
| 14644 | Colin |
+-------+----------+
| 15340 | Nigel |
+-------+----------+
謝謝 :)
通常情況下,不需要left join
,因為鏈接表應該僅具有有效的引用。 一個選項卡指出,原始查詢中的邏輯不正確。
我唯一的猜測是'74'
實際上不是兩位數-隱藏字符或其他問題。 在任何情況下,整數常量都不需要單引號,因此您可以嘗試:
SELECT DT1.name as [Name 1],
DT2.name as [Name 2]
--other columns would go here
FROM linkTable LT JOIN
detailTable DT1
ON LT.id1 = DT1.id JOIN
detailTable DT2
ON LT.id2 = DT2.id
WHERE DT.id = 74;
如果這不能解決問題,我將質疑所有id列均為bigint
的主張。 如所寫,查詢沒有其他地方會發生這種類型轉換。
您想要兩次聯接到明細表,而不是聯接表:
SELECT
DT.name as [Name 1],
DT2.name as [Name 2]
--other columns would go here
FROM linkTable LT
LEFT JOIN
detailTable DT
ON LT.id = DT.id
LEFT JOIN
detailTable DT2
ON LT.id2 = DT2.id
where LT.id = '74'
如果仍然出現這種格式的轉換錯誤,則可能是在示例中未顯示的“其他列”之一中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.