我想做一个 if 语句,不过滤掉那些具有 NULL
idBillingTransaction
所以,如果 idBillingTransaction 不为空,则日期范围不为空,否则,idBillingTransactions
中不应该有日期范围的过滤器(因为它有空值)
这是代码
select *
from subscription cs
LEFT JOIN
billing_transaction bt
ON CONVERT(cs.msisdn USING latin1) = bt.msisdn
where
bt.idBillingTransaction
BETWEEN (SELECT idBillingTransaction
FROM transaction_ids
WHERE dt = '2017-03-31')
AND (SELECT idBillingTransaction
FROM transaction_ids
WHERE dt = '2017-04-30')
最佳答案
我认为您只需修改 WHERE
子句以不删除 NULL
id 计费交易即可获得您想要的结果:
SELECT *
FROM subscription cs
LEFT JOIN billing_transaction bt
ON CONVERT(cs.msisdn USING latin1) = bt.msisdn
LEFT JOIN transaction_ids t
ON bt.idBillingTransaction = t.idBillingTransaction AND
t.dt BETWEEN '2017-03-31' AND '2017-04-30'
我还删除了 WHERE
子句中的两个子查询,因为我认为它们没有必要。相反,只需对 id 计费交易的 transaction_ids
表进行另一次联接,然后比较一系列日期,就会更简洁。
关于mysql - 如果为空则忽略其他日期范围(mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797715/