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

时间:2019-11-11 16:30:57

标签: sql

我正在尝试编写一条SQL语句,其中“ where”子句取决于值是否为空

我有值行名称和编号。我想搜索名称为NULL,然后数字=“ X”的表中的所有内容。我想要另一种情况,如果Number为NULL,则搜索其中Name =“ X”。最后一种情况,如果两者都不为空,则搜索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;

...将是另外两种情况。但是,我被告知无法在本示例中使用案例,我还能怎么做?

2 个答案:

答案 0 :(得分:1)

没有要测试的样本数据,但是此查询应该为您提供所需的结果。

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

SQL OR语句提供了机会。下面的查询将您的书面请求转换为OR语句,因此,假设满足WHERE语句中的条件之一,该查询将从A和B中选择所有内容。

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")

答案 1 :(得分:0)

我会根据or条条件翻译您的要求:

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')