左连接表与查找表中的值

时间:2016-11-02 15:37:32

标签: sql sql-server

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

<!-- Search box -->
<input type="text" id="txt_name"  />
<!-- Search button-->
<input type="button"  id="searchTest" value="Search"/>


<!-- Searching for the ID that the user enter -->
<script language='JavaScript' type='text/JavaScript'>

$('#searchTest').click(function() {

    // removes all the div class before displaying the results
    $('div[id*=ID_]').css('display', 'none');

    //display only whatever the user's entered
        $('div[id*=ID_]').filter(bla).css('display', 'block');
    });

    </script>



    <!-- Test boxes that needs filtering-->
    <div class="color1" id="USEID_company1_user1_Location1">
        <p> test</p>
    </div> 

    <div class="color2" id="USEID_company2_user2_Location2">
        <p> test</p>
    </div> 

然后我尝试创建一个需要包含所有当前客户端的tmp表:

Table: Clients         Table: Profile
ID | Name  | Status            ClientID | Type | Value
-----------------------        -----------------------
 1 | John  | Current                  1 | x     | 1
 2 | Peter | Past                     1 | y     | 2
 3 | Fred  | Current                  2 | x     | 3
                                      2 | y     | 4

我对SQL的了解有限,但我认为我应该能够通过左连接执行此操作,所以我尝试了这个(#tmpClient已经创建):

ID | Name  | TypeY
==================
 1 | John  | 2
 3 | Fred  |

然而,这将永远错过Fred临时表。我可能正在做一些非常简单的错误,但正如我所说,我错过了SQL技能来解决这个问题。请有人帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您必须将LEFT JOIN操作的第二个表的谓词从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'