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),然后在代码级别获取所需的字段。对这个问题有什么更好的解决方案吗?
答案 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)
上添加索引。