在SQL where子句的类似语句中忽略列
本文关键字:语句 SQL where 子句 | 更新日期: 2023-09-27 18:18:47
我正在尝试创建一个jQuery自动完成搜索框,使用c# Web服务查询SQL Server联系人表中的结果。
表中有ContactID, ContactType, FirstName, LastName
和Organization
的列,我目前正试图允许用户在ContactType
设置为IND
(个人)或Organization
时通过FirstName
和Lastname
进行搜索。
我遇到的问题是,对于将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
您的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