空列相等

时间:2018-08-27 02:21:44

标签: sql oracle

我有一个名为func getImageFromUrl(url: URL) -> UIImage { var tempImage: UIImage? = nil print("INSIDE URL -> \(url.absoluteString)") URLSession.shared.dataTask(with: url) { (data, response, error) in if error != nil { print("Error on getImageFromUrl : \(error!.localizedDescription)") return } print("Image data " + data.debugDescription) DispatchQueue.main.async { tempImage = UIImage(data: data!)! print("TEMP IMAGE > \(String(describing: tempImage?.images![0]))") } }.resume() if tempImage == nil { print("IMAGE IS NIL!") } return tempImage! } 的表。在此表中,我有pat_info列,该列可以为空。当我编写此查询时:

id_number

它不检索任何东西,因为'adam'行在SELECT * FROM pat_info WHERE id_number = id_number AND first_name = 'adam' 中不包含值

所以我需要检索'adam'行而不删除。

id_number是必需的。

3 个答案:

答案 0 :(得分:2)

最可能您不需要WHERE子句。只需使用此:

SELECT *
FROM pat_info
WHERE first_name = 'adam';

您当前查询可能失败的原因是,如果id_number恰好是NULL,则检查id_number = id_number将会失败,因为NULL(在语义上是“不已知”)本身并不等同。

如果必须在WHERE子句中包含该虚拟检查,则尝试使用WHERE 1 = 1,即:

SELECT *
FROM pat_info
WHERE first_name = 'adam' AND 1 = 1;

答案 1 :(得分:1)

简单地说,如果您要检索的行中ID_NUMBER为NULL,那么如果在查询中指定ID_NUMBER = ID_NUMBER,则将无法检索该行。这样做的原因是,在关系数据库中,NULL不会与任何值(包括NULL)“等于”比较。因此,如果ID_NUMBER为NULL,则测试ID_NUMBER = ID_NUMBERNULL = NULL相同,并且它将永远不会返回TRUE。任何在比较两端都存在NULL的比较都将返回NULL。就是这样。

编辑

一种可能的解决方法是将查询重写为:

Select *
  from pat_info
  Where (id_number = id_number OR 
         ID_NUMBER IS NULL) and
        first_name = 'adam'

以这种方式,至少在我看来,满足了在查询中使用ID_NUMBER = ID_NUMBER的要求。

谢谢,@ TimBiegeleisen。 :-)

答案 2 :(得分:0)

您也可以使用LIKE,

SELECT *
  FROM pat_info
 WHERE '%'||id_number||'%' LIKE '%'||id_number||'%'
   AND first_name = 'adam'

尽管,我不明白为什么要提出这种条件,

id_number = id_number