簡體   English   中英

SQL選擇-根據另一個表中的ID返回同一列兩次

[英]SQL Select - Return same column twice based on IDs in another table

假設我有下面的表( IDID2分別是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.

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