在子查询中处理null

时间:2011-06-29 02:41:11

标签: sql hibernate null

SELECT *
  FROM myTable m
 WHERE m.userId = :userId
   AND m.X = (SELECT MAX(X) 
                FROM myTable m
               WHERE m.userId = :userId 
                 AND m.contactNumber = :contactNumber)";

问题是,如果没有这样的行并且语句无法执行,语句的第二部分将求值为null。我希望在这种情况下结果为空。

解决此问题的一种方法是执行昂贵的文件排序(order by),然后在代码级别获取所需的字段。对这个问题有什么更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

你能使用ISNULL吗?

和m.X = ISNULL(,'')

答案 1 :(得分:0)

我不确定你为什么在这里得到NULL,但试试这个:

SELECT myTable.*, IF myTableMax.myMaxX IS NOT NULL myTableMax.myMaxX ELSE ""
  FROM myTable
LEFT OUTER JOIN 
       (SELECT userID, contactNumber, MAX(X) AS myMaxX
          FROM myTable
      GROUP BY userID, contactNumber) AS myTableMax
    ON myTable.userID = myTableMax.userID
   AND myTable.contactNumber = myTableMax.contactNumber
 WHERE myTable.userID = :userID
   AND myTable.contactNumber = :contactNumber

如果您担心效果,请在mytable (userID, contactNumber)上添加索引。