Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Select-根据另一个表中的ID返回同一列两次_Sql_Sql Server - Fatal编程技术网

SQL Select-根据另一个表中的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 | +------+--------+------+------

假设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时出错

链接表

+-----+-------+--------+-------------------------+-----------+
| 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发布的代码中所涉及的数据类型是正确的,则类型错误不可能发生。这是正确的答案-引号一定是导致问题的原因。另外,我在最初的查询中加入了错误的表。现在一切正常-谢谢