显示左联接中的所有月份,但仅显示当前年份

时间:2019-03-27 03:35:30

标签: mysql

我有一个简单的查询

SELECT *
FROM `month` 
LEFT JOIN income
ON month.idmonth = income.idmonth

我想今年显示每个月的收入,每个月只有一个收入。

我尝试与

结合
WHERE YEAR(`created_at`) = YEAR(CURDATE())

但是此查询仅显示1行

或删除此行:

WHERE YEAR(`created_at`) = YEAR(CURDATE())

表格显示

|一个月收入|

| Januari | 13000 | // 2018年

| Januari | 14000 | // 2019年当年

| Februari | NULL |

|市场NULL |

|四月| NULL |

|梅NULL |

。 。

|十二月NULL |

这就是我想要的

|一个月收入|

| Januari | 14000 |

| Februari | NULL |

|市场NULL |

|四月| NULL |

|梅NULL |

。 。

|十二月NULL |

1 个答案:

答案 0 :(得分:0)

如果在左联接上应用where子句,则其行为类似于交集操作。

您可以使用符合条件的AND条件代替where子句

像下面的查询

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())

尝试这个Demo