使用OR语句进行搜索时,SQL会获得更好的结果
我有一个简单的名字搜索查询,查找名字和姓氏。如果一个字段为空,我需要能够使输出为and或语句,如果两者都为空,则输出为and语句使用OR语句进行搜索时,SQL会获得更好的结果,sql,Sql,我有一个简单的名字搜索查询,查找名字和姓氏。如果一个字段为空,我需要能够使输出为and或语句,如果两者都为空,则输出为and语句 SELECT USERNAME, FIRSTNAME, LASTNAME FROM USERS WHERE FIRSTNAME LIKE @FIRSTNAME OR LASTNAME LIKE @LASTNAME 可以先检查该字段是否为空,然后进行比较,并包含%字符作为类似语法 SELECT USERNAME, FIRSTNAME, LASTN
SELECT USERNAME,
FIRSTNAME,
LASTNAME FROM USERS WHERE FIRSTNAME LIKE @FIRSTNAME OR LASTNAME LIKE @LASTNAME
可以先检查该字段是否为空,然后进行比较,并包含%字符作为类似语法
SELECT USERNAME,
FIRSTNAME,
LASTNAME
FROM USERS
WHERE (
@FIRSTNAME IS NULL
OR FIRSTNAME LIKE '%' + @FIRSTNAME + '%'
)
AND (
@LASTNAME IS NULL
OR LASTNAME LIKE '%' + @LASTNAME + '%'
)
由于性能原因,最好避免使用
或。你可以试试这样的
SELECT USERNAME,
FIRSTNAME,
LASTNAME
FROM USERS
WHERE FIRSTNAME LIKE isnull(@FIRSTNAME + '%', firstname)
and LASTNAME LIKE isnull(@LASTNAME + '%', lastname)
and isnull(@firstname, @lastname) is not null -- return empty result when both @ are null
您使用的是什么数据库引擎?问题是什么?嗨@James,请告诉我们您需要什么。一些示例数据也很好。。。
SELECT USERNAME,
FIRSTNAME,
LASTNAME
FROM USERS
WHERE FIRSTNAME LIKE isnull(@FIRSTNAME + '%', firstname)
and LASTNAME LIKE isnull(@LASTNAME + '%', lastname)
and isnull(@firstname, @lastname) is not null -- return empty result when both @ are null