Mysql 如何合并两个表并保留它们共享的列,同时添加它们不共享的其他列';T
假设我有这两张桌子:Mysql 如何合并两个表并保留它们共享的列,同时添加它们不共享的其他列';T,mysql,Mysql,假设我有这两张桌子: +--------+-----+ | bookID | Jan | +--------+-----+ | 1094 | 1 | | 1058 | 1 | | 984 | 1 | +--------+-----+ +--------+-----+ | bookID | Dec | +--------+-----+ | 1 | 1 | | 2 | 1 | +--------+-----+ 我想得到:
+--------+-----+
| bookID | Jan |
+--------+-----+
| 1094 | 1 |
| 1058 | 1 |
| 984 | 1 |
+--------+-----+
+--------+-----+
| bookID | Dec |
+--------+-----+
| 1 | 1 |
| 2 | 1 |
+--------+-----+
我想得到:
+--------+-----+-----+
| bookID | Jan | Dec |
+--------+-----+-----+
| 1094 | 1 | 0 |
| 1058 | 1 | 0 |
| 984 | 1 | 0 |
| 1 | 0 | 1 |
| 2 | 0 | 1 |
+--------+-----+-----+
我曾考虑在id上使用join,并使用union来获取不在两个表中的bookID,但这似乎效率低下,因为在接下来的几个月里我将不得不这样做
是否有更好的方法从本表中实现这一点:
+----+--------+-----------+--------------+------------+------------+----------+
| id | bookID | studentID | checkOutDate | returnDate | dueDate | extended |
+----+--------+-----------+--------------+------------+------------+----------+
| 1 | 25 | 1 | 2019-12-09 | NULL | 2019-12-25 | 0 |
| 2 | 357 | 2 | 2019-12-09 | NULL | 2019-12-25 | 0 |
| 3 | 365 | 3 | 2019-12-09 | NULL | 2019-12-25 | 0 |
| 4 | 984 | 8 | 2019-12-09 | NULL | 2019-12-25 | 0 |
| 5 | 1094 | 1 | 2019-12-09 | NULL | 2019-12-25 | 0 |
| 11 | 99 | 2 | 2019-01-11 | NULL | 2019-12-10 | 0 |
| 12 | 1 | 2 | 2019-01-24 | NULL | 2019-01-11 | 0 |
+----+--------+-----------+--------------+------------+------------+----------+
我想显示一个图书列表,每本书有13列:12列显示每月的签出数量,第13列显示该书的全年签出总数。这相当简单(但有点冗长)使用案例从原始表中获取每个月的计数作为一列,并按帐簿和年份分组以获取一行
SELECT
bookID, YEAR(checkoutDate) `year`,
COUNT(CASE WHEN MONTH(checkoutDate) = 1 THEN 1 END) `jan`,
COUNT(CASE WHEN MONTH(checkoutDate) = 2 THEN 1 END) `feb`,
COUNT(CASE WHEN MONTH(checkoutDate) = 3 THEN 1 END) `mar`,
COUNT(CASE WHEN MONTH(checkoutDate) = 4 THEN 1 END) `apr`,
COUNT(CASE WHEN MONTH(checkoutDate) = 5 THEN 1 END) `may`,
COUNT(CASE WHEN MONTH(checkoutDate) = 6 THEN 1 END) `jun`,
COUNT(CASE WHEN MONTH(checkoutDate) = 7 THEN 1 END) `jul`,
COUNT(CASE WHEN MONTH(checkoutDate) = 8 THEN 1 END) `aug`,
COUNT(CASE WHEN MONTH(checkoutDate) = 9 THEN 1 END) `sep`,
COUNT(CASE WHEN MONTH(checkoutDate) = 10 THEN 1 END) `oct`,
COUNT(CASE WHEN MONTH(checkoutDate) = 11 THEN 1 END) `nov`,
COUNT(CASE WHEN MONTH(checkoutDate) = 12 THEN 1 END) `dec`,
COUNT(*) `year total checkouts`
FROM myTable
GROUP BY bookID, YEAR(checkoutDate)
如果您告诉我们表名是什么,则更容易显示示例查询这是否回答了您的问题?请每个帖子问一个问题。这里的第一个问题经常重复。(你描述了一个完整的外部连接。)在考虑发帖之前,请始终用谷歌搜索任何错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,带有或不带你的特定字符串/名称和网站:stackoverflow.com&tags,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。如果您的问题已解决,请单击答案左侧的复选标记接受答案。也可以随意投票。