【问题标题】:Select MySQL Month() for null column为空列选择 MySQL Month()
【发布时间】:2014-11-15 07:49:21
【问题描述】:

有问题要问。当我使用左连接时,即使某些行中有空值,如何列出所有左表以显示数据?

这是我的问题:

SELECT *, SUM(transactions.debit_credit) current_spending 
FROM (`budget`) LEFT JOIN `categories` ON `budget`.`category`=`categories`.`idcategory` 
LEFT JOIN `user_category` ON `budget`.`category`=`user_category`.`idcategory` 
LEFT JOIN `category_transaction` ON `budget`.`category`=`category_transaction`.`idcategory` 
LEFT JOIN `transactions` ON `category_transaction`.`idtransaction`=`transactions`.`idtransaction` 
WHERE `user_category`.`iduser` = '1' 
AND MONTH(transactions.transaction_date) = '11' 
GROUP BY `budget`.`idbudget`;

当我删除 AND MONTH(transactions.transaction_date) = '11' 时,查询可以正常工作,接受它会显示所有数据,而不是仅显示 1 个月的交易。

帮助??请??知道怎么做吗??

【问题讨论】:

  • 请注意,transaction.transaction_date 属于 TIMESTAMP 数据类型

标签: mysql join left-join


【解决方案1】:

您的where 子句将您的left join 转换为inner join,因为您根据联接表的条件过滤数据。

而是将该条件放在您的联接的 on 子句中

SELECT *, SUM(transactions.debit_credit) current_spending 
FROM (`budget`) 
LEFT JOIN `categories` ON `budget`.`category`=`categories`.`idcategory` 
LEFT JOIN `user_category` ON `budget`.`category`=`user_category`.`idcategory` 
                         AND `user_category`.`iduser` = '1' 
LEFT JOIN `category_transaction` ON `budget`.`category`=`category_transaction`.`idcategory` 
LEFT JOIN `transactions` ON `category_transaction`.`idtransaction`=`transactions`.`idtransaction` 
                        AND MONTH(transactions.transaction_date) = '11' 
GROUP BY `budget`.`idbudget`;

【讨论】:

  • 感谢您的帮助。我在 select 子句中添加了 IFNULL() 以获得我的结果。
猜你喜欢
  • 2011-04-01
  • 2010-12-24
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多