我有一個像下面那個從另一個選擇減去。我遇到的問題是,如果第二個SELECT(要執行minus操作的那個)返回NULL,則即使第一個查詢具有值,完整查詢也會返回NULL。看起來像MySQL認爲1-NULL
= NULL
。我怎樣才能解決這個問題?sql選擇 - 另一個選擇與NULL返回只有NULL
SELECT round(sum(iv.`amount`)) -
(
SELECT round(sum(pay.`amount`)) amountSum
FROM invoice iv
LEFT JOIN invoiceFactoring ivf on ivf.invoiceID=iv.invoiceID
LEFT JOIN user systemuser ON (systemuser.userID=iv.ownerUserID)
LEFT JOIN Payment pay ON (pay.`invoiceID`=iv.`invoiceID`)
WHERE
(iv.invoiceStateID = 2 OR iv.invoiceStateID = 3)
AND
(ivf.`invoiceFactoringProcessID` = 7)
AND (pay.`paymentMethodID` = 1 OR pay.`paymentMethodID` = 2)
AND systemuser.`groupID` = 1
AND iv.`disabled` <> 1
AND ivf.`invoiceExpiryDate` BETWEEN date_add(now(), INTERVAL - 28 DAY) AND date_add(now(), INTERVAL - 21 DAY)
)
FROM invoice iv
LEFT JOIN invoiceFactoring ivf on ivf.invoiceID=iv.invoiceID
LEFT JOIN user systemuser ON (systemuser.userID=iv.ownerUserID)
WHERE
(iv.invoiceStateID = 2 OR iv.invoiceStateID = 3)
AND
(ivf.`invoiceFactoringProcessID` = 7 or ivf.`invoiceFactoringProcessID`)
AND systemuser.`groupID` = 1
AND iv.`disabled` <> 1 /* ta bort de som är inaktiva*/
AND ivf.`invoiceExpiryDate` BETWEEN date_add(now(), INTERVAL - 28 DAY) AND date_add(now(), INTERVAL - 21 DAY)
這不僅僅是MySQL的包裹「內部」 SQL那怎麼NULL被定義爲表現 - 時期。 – MatBailie 2012-02-03 13:45:10
@Dems:看看'1-0 = 0'如何被認爲是一個普遍的事實,但我不認爲'1-NULL = NULL'可以這麼說。相反,它是由SQL標準定義並由mySQL實現的。 **我的意思是鬆散! – onedaywhen 2012-02-03 14:52:37
@onedaywhen - 除NULL不是純粹的SQL概念。這是超越的。 – MatBailie 2012-02-03 15:19:50