使用OR语句进行搜索时,SQL会获得更好的结果

使用OR语句进行搜索时,SQL会获得更好的结果,sql,Sql,我有一个简单的名字搜索查询,查找名字和姓氏。如果一个字段为空,我需要能够使输出为and或语句,如果两者都为空,则输出为and语句 SELECT USERNAME, FIRSTNAME, LASTNAME FROM USERS WHERE FIRSTNAME LIKE @FIRSTNAME OR LASTNAME LIKE @LASTNAME 可以先检查该字段是否为空,然后进行比较,并包含%字符作为类似语法 SELECT USERNAME, FIRSTNAME, LASTN

我有一个简单的名字搜索查询,查找名字和姓氏。如果一个字段为空,我需要能够使输出为and或语句,如果两者都为空,则输出为and语句

 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