mysql - 如果为空则忽略其他日期范围(mysql)

标签 mysql sql if-statement

我想做一个 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/

相关文章:

mysql - 使用 mysql 按数据导入日期按日期在现有数据集中查找唯一/新值

java - java-ee中if语句的逻辑问题

mysql - 定义别名列的大小

mysql - 使用 MySQL 从同一个表中以不同的顺序和数量提取信息

mysql - SQL 查询从两个表中选择匹配和缺失的值

SQL 报表生成器 : get value from group within tablix

linux - 需要修复小循环错误

c++ - 如何提示用户重新循环整个程序?

mysql - 按日期分组,即使没有日期条目

mysql - 如何: High traffic db