Mysql 按日期联接两个表order,并将0值设置为空列
我有两个不同的表:第一个表用于为声明其产品的用户发送数据Mysql 按日期联接两个表order,并将0值设置为空列,mysql,Mysql,我有两个不同的表:第一个表用于为声明其产品的用户发送数据 +---+-----------+----------+--------+ |id | claimed | date | ref no | +---+-----------+----------+--------+ | 1 | 20 | 20-02-13 | sda123 | | 2 | 30 | 22-02-13 | sda123 | | 3 | 40 | 2
+---+-----------+----------+--------+
|id | claimed | date | ref no |
+---+-----------+----------+--------+
| 1 | 20 | 20-02-13 | sda123 |
| 2 | 30 | 22-02-13 | sda123 |
| 3 | 40 | 24-02-13 | sda123 |
| 4 | 50 | 26-02-13 | sda123 |
+---+-----------+----------+--------+
第二个表用于为添加产品的用户保存数据
+---+-----------+----------+--------+
|id | added | date | ref no |
+---+-----------+----------+--------+
| 1 | 15 | 21-02-13 | sda123 |
| 2 | 25 | 23-02-13 | sda123 |
| 3 | 35 | 25-02-13 | sda123 |
| 4 | 45 | 27-02-13 | sda123 |
+---+-----------+----------+--------+
现在我想把这两个表连接起来。但我想根据日期加入他们。如果在提到的日期,用户仅添加了产品,则索赔栏中的值将设置为0,反之亦然
sda123的历史
有谁能帮我在sql中做这件事吗?提前谢谢 选择所有日期的并集,然后将其与两个表联接以获得总和:
SELECT COALESCE(SUM(`claimed`), 0) `claimed`, COALESCE(SUM(`added`),0) `added`, `date`
FROM (SELECT `date` FROM `claimed` UNION SELECT `date` FROM `added`) `dates`
LEFT JOIN `claimed` USING (`date`)
LEFT JOIN `added` USING (`date`)
GROUP BY `date`
ORDER BY `date`;
我使用COALESCE来防止NULL出现在结果中;相反,如果某个表中的相应值在该特定日期不存在,它将显示0。您也可以使用IFNULL代替COALESCE,因为只有一个值需要计算
使用左连接并将空值替换为零,如下所示:
SELECT CLAIMED.claimed, IFNULL(ADDED.added, 0), CLAIMED.date
FROM CLAIMED JOIN ADDED ON CLAIMED.date=ADDED.date
我使用大写字母作为表名,因为您没有指定它们。实际上是这样。但现在我是手动使用的。是的,它在实际表格中显示2013-02-20。但是因为如果我写在这里太长了,我会编辑它。不,它没有任何意义。杰克,在结果中如何把0变成破折号?
SELECT CLAIMED.claimed, IFNULL(ADDED.added, 0), CLAIMED.date
FROM CLAIMED JOIN ADDED ON CLAIMED.date=ADDED.date