我有兩個表,services
和extraFees
,相關的1xn到services.id = extraFees.serviceId
。我的問題是,當我對s.id
和s.category
的不存在的組合執行以下查詢時,我仍然得到1 row(s) returned
,所有字段均爲NULL。MIN()導致MySQL返回所有NULL行而不是0行
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'
我知道罪魁禍首是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'
爲什麼會發生這種情況,我該如何避免它?
我讀過那個文檔,但是我看不到MIN()返回的NULL與我在最後一個查詢中手動指定的NULL不同。 – user3748908
@ user3748908只需使用NULL,不會觸發聚合計算,因此在基表上完成所有過濾之後,不會顯示任何行。使用'MIN'強制總是返回一行的聚合操作。過濾完成後(不返回任何行),將對空結果集進行聚合計算,結果爲具有「NULL」值的一行。 – Glenn