2012-04-23 86 views
0

我有一个表,我必须检查一个特定的列在空值或有价值。
可以说列名是order_price
查询检查是否存在记录和列空

如果我只是检查where order_price is null那么这也包括不在表中的记录。
例如我有order_id = 1其orders_price为空,并且我有order_id = 2,这在订单表中不存在。因此,而不是where条件来检查order_price是否为空,我想知道列是否为空或记录不存在。

我正在做这个表的外连接,所以我不能映射另一个表的主键。我正在使用Oracle。

感谢

+1

向我们显示您的查询。 – 2012-04-23 21:08:15

回答

3
SELECT o.*, 
     od.order_price, 
     CASE 
     WHEN od.order_id IS NULL THEN 
       'Not exists' 
     WHEN od.order_price IS NULL THEN 
       'Exists, IS NULL' 
     ELSE 
       'Exists, IS NOT NULL' 
     END AS nullness 
FROM orders o 
LEFT JOIN 
     order_data od 
ON  od.order_id = o.id 
2

取而代之的加入,则可以使用 “EXISTS/NOT EXISTS” 关键字和子查询。

例如

SELECT parent.* 
FROM parent 
WHERE EXISTS (SELECT 1 
       FROM child 
       WHERE child.id_parent = parent.id AND child.somecolumn IS NULL) 

根据你想要还是不想让谓词匹配,你可以使用“exists/not exist”来玩。