Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 使用查找表中的值左连接表_Sql_Sql Server - Fatal编程技术网

Sql 使用查找表中的值左连接表

Sql 使用查找表中的值左连接表,sql,sql-server,Sql,Sql Server,我在SQL Server上有两个表。一个包含客户端,一个包含客户端配置文件查找表。有点像这样(请注意,Fred在查找表中没有任何值): 然后,我尝试创建一个tmp表,该表需要包含所有当前客户端,如下所示: ID | Name | TypeY ================== 1 | John | 2 3 | Fred | 我对SQL的了解有限,但我认为我应该能够通过左连接来实现这一点,所以我尝试了这个方法(已经创建了tmpClient): 然而,这将永远错过弗雷德的临时表。我可能

我在SQL Server上有两个表。一个包含客户端,一个包含客户端配置文件查找表。有点像这样(请注意,Fred在查找表中没有任何值):

然后,我尝试创建一个tmp表,该表需要包含所有当前客户端,如下所示:

ID | Name  | TypeY
==================
 1 | John  | 2
 3 | Fred  |
我对SQL的了解有限,但我认为我应该能够通过左连接来实现这一点,所以我尝试了这个方法(已经创建了tmpClient):


然而,这将永远错过弗雷德的临时表。我可能做了一些非常简单的错误,但正如我所说的,我缺少解决这个问题的SQL技巧。请有人帮我把这个查询弄对。

您必须将与
左连接操作的第二个表有关的谓词从
WHERE
移动到
ON
子句:

insert into #tmpClient
   select a.ID, a.Name, b.Value
   from Clients a
   left join Profile b
   on a.ID = b.ClientID and b.Type = 'y'
   where a.Status = 'Current' 

我试过了,结果也一样。还是没有弗雷德。我认为这与他没有出现在Profile表中这一事实有关,因此他的ClientID没有b.Type='y'。Kees这不应该是个问题,因为
b.Type='y'
谓词出现在
ON
子句中。最后解决了所有问题。查询将正确的结果放入临时表中,但随后的代码无法正确处理。整个下午我似乎都在追求一个不存在的错误。非常感谢你的帮助。
insert into #tmpClient
   select a.ID, a.Name, b.Value
   from Clients a
   left join Profile b
   on a.ID = b.ClientID
   where a.Status = 'Current' and b.Type = 'y'
insert into #tmpClient
   select a.ID, a.Name, b.Value
   from Clients a
   left join Profile b
   on a.ID = b.ClientID and b.Type = 'y'
   where a.Status = 'Current'