mysql - 显示左连接中的所有月份,但仅显示当前年份
问题描述
我有简单的查询
选择 * 从`月` LEFT JOIN 收入 ON 月.idmonth = 收入.idmonth
我想显示今年每个月的收入,每个月只有一个收入。
我试过结合
WHERE YEAR(`created_at`) = YEAR(CURDATE())
但此查询仅显示 1 行
或删除此行:
WHERE YEAR(`created_at`) = YEAR(CURDATE())
表格显示
| 月 | 收入 |
| 一月 | 13000 | //2018
| 一月 | 14000 | //当前年份2019
| 二月 | 空 |
| 市场 | 空 |
| 四月 | 空 |
| 梅 | 空 |
. . .
| 十二月 | 空 |
所以这就是我想要的
| 月 | 收入 |
| 一月 | 14000 |
| 二月 | 空 |
| 市场 | 空 |
| 四月 | 空 |
| 梅 | 空 |
. . .
| 十二月 | 空 |
解决方案
如果您在左连接上应用 where 子句,那么它的行为就像一个交集操作。
而不是 where 子句,您可以将 AND 条件与您的 ON 条件一起使用
像下面的查询
CREATE TABLE `bulan` (
`idmonth` int(11) NOT NULL AUTO_INCREMENT,
`month` varchar(50) NOT NULL,
PRIMARY KEY (`idmonth`)
);
insert into `bulan`(`idmonth`,`month`)
values
(1,'januari'),
(2,'februari'),
(3,'maret'),
(4,'april'),
(5,'mei'),
(6,'juni'),
(7,'juli'),
(8,'agustus'),
(9,'september'),
(10,'oktober'),
(11,'november'),
(12,'desember');
CREATE TABLE `income` (
`idincome` int(11) NOT NULL AUTO_INCREMENT,
`sk` int(11) DEFAULT NULL,
`idmonth` int(11) DEFAULT NULL,
`income` int(11) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`idincome`)
);
insert into `income`
(`idincome`,`sk`,`idmonth`,`income`,`created_at`,`updated_at`)
values
(1,110,1,1300,'2019-03-26 08:01:26','2019-03-26 08:01:26'),
(2,110,1,2400,'2020-03-27 09:57:11',NULL);
以下查询为您提供预期的输出。
SELECT bulan.month, income.income
FROM `bulan`
LEFT JOIN income
ON bulan.idmonth = income.idmonth
and YEAR(`created_at`) = YEAR(CURDATE())
试试这个演示
推荐阅读
- java - 根据旋转角度更改 ImageView 位置
- python-3.x - 在 python 中使用列名和索引创建一个循环
- java - SnakeGame 类型必须实现继承的抽象方法 KeyListener.keyReleased(KeyEvent)
- reactjs - firebase.storage 不是函数
- python - 涉及副作用的 Python 编程
- node.js - 我该如何修复这个 npm start 命令?
- reactjs - react-three-fiber绕某个轴旋转
- python - Dropna 仅在最后 n 行 Python
- kotlin - 有没有更简单的方法来使用 Kotest 基于属性的测试来测试所有排列?
- python - 重复关键字参数的 Python SyntaxError vs TypeError