在SQL where子句的类似语句中忽略列

本文关键字:语句 SQL where 子句 | 更新日期: 2023-09-27 18:18:47

我正在尝试创建一个jQuery自动完成搜索框,使用c# Web服务查询SQL Server联系人表中的结果。

表中有ContactID, ContactType, FirstName, LastNameOrganization的列,我目前正试图允许用户在ContactType设置为IND(个人)或Organization时通过FirstNameLastname进行搜索。

我遇到的问题是,对于将ContactType设置为ORG(用于组织)的特定联系人,我仍然只能通过键入联系人的名字和姓氏来返回结果。它将结果的名称显示为组织名称,但如果我按实际组织名称进行搜索,它不会返回任何结果。我的查询如下:

SELECT CASE WHEN contacttype= 'IND' AND FirstName != '' AND LastName != ''
                 OR ContactType IS NULL THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1
        END AS FullName, 
       ContactID
  FROM Contact 
 WHERE Updated = '1' 
   AND Organization LIKE @SearchText 
    OR FirstName + ' ' + LastName LIKE @SearchText + '%' 
 ORDER BY FullName ASC

在SQL where子句的类似语句中忽略列

您的AND s和OR s有一些问题,我认为您可能需要这样的东西:

SELECT CASE WHEN (contacttype= 'IND' AND FirstName != '' AND LastName != '') 
                 OR ContactType is null 
                 THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1 
        END AS FullName, 
       ContactID 
  FROM Contact 
 WHERE Updated = '1' 
   AND (Organization LIKE @SearchText 
       OR FirstName + ' ' + LastName LIKE @SearchText + '%') 
 ORDER BY FullName ASC

正如bolu在评论中指出的那样,您不需要为您的组织名称搜索添加通配符。这可能是必需的,取决于您传入的内容。

按名称搜索时将%添加到@searchText,但按组织搜索时没有添加任何内容。您可能需要根据您的逻辑使用括号(注意:我根据我的猜测在下面添加了一个)。

SELECT CASE WHEN contacttype= 'IND' AND FirstName != '' AND LastName != ''
                 OR ContactType IS NULL THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1
        END AS FullName, 
       ContactID
 FROM Contact 
 WHERE Updated = '1' 
   AND (Organization LIKE @SearchText + '%' 
        OR FirstName + ' ' + LastName LIKE @SearchText + '%') 
 ORDER BY FullName ASC