Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何合并两个表并保留它们共享的列,同时添加它们不共享的其他列';T_Mysql - Fatal编程技术网

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,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。如果您的问题已解决,请单击答案左侧的复选标记接受答案。也可以随意投票。