use*_*908 2 mysql sql database
我有两个表,services并且extraFees与1xn至相关services.id = extraFees.serviceId。我的问题是,当我执行以下查询一个不存在的组合s.id和s.category,我仍然得到1 row(s) returned,与各界NULL。
SELECT 100 + (s.feeRate * MIN(ef.extra)) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
Run Code Online (Sandbox Code Playgroud)
我知道罪魁祸首是MIN(),因为如果我将其替换为数字或NULL,0 row(s) returned则会得到,这就是我想要的。
SELECT 100 + (s.feeRate * 5) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
SELECT 100 + (s.feeRate * NULL) AS extraFees FROM services s
LEFT JOIN extraFees ef ON s.id=ef.serviceId WHERE s.id=12 AND s.category='PRG'
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何避免呢?
聚合函数将返回结果。尝试这个:
CREATE TABLE x(id int);
SELECT MIN(id) FROM x
Run Code Online (Sandbox Code Playgroud)
您将获得1行:NULL。如果要忽略NULL结果,可以包装一个子查询:
SELECT y.id
FROM (SELECT MIN(id) AS id FROM x) y
WHERE y.id IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
或利用HAVING条款。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |