SQL语句-Where子句取决于输入

SQL语句-Where子句取决于输入,sql,Sql,我试图编写一个sql语句,其中“where”子句取决于值是否为null 我有行名称和编号的值。我想搜索表中的所有内容,其中is Name为NULL,然后Number=“X”。我想要另一种情况,如果数字为空,则搜索where Name=“X”。最后一种情况是,如果两者都不为NULL,则搜索WHERE Name=“X”和Room=“X” 大概是这样的: SELECT * FROM a JOIN b ON a.id = b.id WHERE CASE WHEN a.Name IS NULL A

我试图编写一个sql语句,其中“where”子句取决于值是否为null

我有行名称和编号的值。我想搜索表中的所有内容,其中is Name为NULL,然后Number=“X”。我想要另一种情况,如果数字为空,则搜索where Name=“X”。最后一种情况是,如果两者都不为NULL,则搜索WHERE Name=“X”和Room=“X”

大概是这样的:

SELECT * FROM a JOIN b ON a.id = b.id
WHERE
CASE
    WHEN a.Name IS NULL AND b.Number IS NOT NULL THEN a.Name = "X"
    ....
END;

这个。。。其他两种情况都是这样。然而,我被告知,我不能使用本例中的用例,否则我将如何做到这一点?

我将使用
ed条件翻译您的需求:

where
    -- Name IS NULL then Number = "X"
    (name is null and number = 'X')

    --  if Number is NULL then search for where Name = "X"
    or (number is null and name = 'X')

    -- WHERE if both are NOT NULL then search for where Name = "X" and Room = "X"
    or (name = 'X' and number is not null and room = 'X')

没有要测试的样本数据,但此查询应该会生成您要查找的结果

您需要做的是使用一点,基本上您需要说的是:“如果这些条件之一为真,则返回结果” ,其中条件是您在上面概述的规则集

SQL
语句提供了这种机会。下面的查询将您的书面请求转换为
语句,因此该查询将选择A和B中的所有内容,前提是满足
WHERE
语句中的其中一个条件

SELECT 
    * 
FROM 
    A 
        INNER JOIN B ON A.id = B.id
WHERE
    (name IS NULL AND number = "X")
    OR 
    (number IS NULL AND name = "X")
    OR 
    (name = "X" AND number IS NOT NULL AND room = "X")