SQL Select-根据另一个表中的ID返回同一列两次
假设ID和ID2下面的表分别是PK/FK,我如何设计一个查询,将detailTable.name列拉出两次,第一个表中的每个ID一次 我期望的结果集如下所示:SQL Select-根据另一个表中的ID返回同一列两次,sql,sql-server,Sql,Sql Server,假设ID和ID2下面的表分别是PK/FK,我如何设计一个查询,将detailTable.name列拉出两次,第一个表中的每个ID一次 我期望的结果集如下所示: +------+--------+------+---------+ | Name | Name 2 | Code | Created | +------+--------+------+---------+ | Dave | Steven | AAAA | 1/10/10 | +------+--------+------+------
+------+--------+------+---------+
| 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时出错
链接表
+-----+-------+--------+-------------------------+-----------+
| 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 |
+-----+-------+--------+-------------------------+-----------+
明细表
+-------+----------+
| ID | Name |
+-------+----------+
| 76 | Dave |
+-------+----------+
| 15157 | Steven |
+-------+----------+
| 94 | Roger |
+-------+----------+
| 108 | Geoff |
+-------+----------+
| 16346 | Penelope |
+-------+----------+
| 15966 | Paul |
+-------+----------+
| 77 | Michael |
+-------+----------+
| 14644 | Colin |
+-------+----------+
| 15340 | Nigel |
+-------+----------+
谢谢:您想加入详细信息表两次,而不是链接表:
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'
如果此格式仍存在转换错误,则可能是在示例中未显示的其他列之一中。在正常情况下,不需要左联接,因为链接表应仅具有有效引用。一个选项卡指出,原始查询中的逻辑不正确 我唯一的猜测是“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的断言。如前所述,查询没有其他地方会发生这种类型转换。所有三个ID列都是bigint。如果所有的id列都是数字,我看不出该错误是如何发生的。这个查询显然没有达到您的目的,但这是一个不同的问题。如果从“74”中删除单引号,您是否仍然会遇到相同的问题?我认为引号是导致问题的原因,同时也会加入错误的表。谢谢这修复了逻辑错误。你有没有解释为什么会发生类型错误?OP声明所有id列都是数字。我不明白为什么这个版本可以解决这个问题。在我编辑代码块之前,你是否已经开始发布这个评论了?如果OP发布的代码中所涉及的数据类型是正确的,则类型错误不可能发生。这是正确的答案-引号一定是导致问题的原因。另外,我在最初的查询中加入了错误的表。现在一切正常-谢谢