我正在尝试编写一条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;
...将是另外两种情况。但是,我被告知无法在本示例中使用案例,我还能怎么做?
答案 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')