2014-04-03 86 views
-1

我有两个类似的mysql表,并希望在一个输出(合并)中从两个表中获取数据。我该怎么做?如何在一个输出中合并两个mysql表的结果

因为这个原因,我创建了两个单独的查询来检查我正在找什么。

第一:表 - > web_session

SELECT date_format(booking_time, '%m-%Y') AS m, count(booking_time) AS b 
FROM web_session 
WHERE 
    date(booking_time) >= date_sub(curdate(), interval 12 month) 
AND 
    date(booking_time) <= date_add(curdate(), interval 6 month) 
GROUP BY month(booking_time) 
ORDER BY booking_time ASC; 

输出:

m, b 
10-2013, 15 
11-2013, 6 
12-2013, 13 
01-2014, 10 
02-2014, 10 
03-2014, 25 
04-2014, 1 

二:表 - > web_log

SELECT date_format(request_time, '%m-%Y') AS m, count(request_time) AS r 
FROM web_log 
WHERE 
    date(request_time) >= date_sub(curdate(), interval 12 month) 
AND 
    date(request_time) <= date_add(curdate(), interval 6 month) 
GROUP BY month(request_time) 
ORDER BY request_time ASC; 

输出:

m, r 
03-2014, 45 
04-2014, 35 

所需的输出:

m, b, r 
10-2013, 15, null 
11-2013, 6, null 
12-2013, 13, null 
01-2014, 10, null 
02-2014, 10, null 
03-2014, 25, 45 
04-2014, 1, 35 
+0

您的日期使用'LEFT OUTER JOIN'。 –

回答

1

你需要加入他们的行列。试试这个:

SELECT T1.m,T1.b,T2.r FROM 
(
SELECT date_format(booking_time, '%m-%Y') AS m, count(booking_time) AS b 
FROM web_session 
WHERE 
    date(booking_time) >= date_sub(curdate(), interval 12 month) 
AND 
    date(booking_time) <= date_add(curdate(), interval 6 month) 
GROUP BY month(booking_time) 
ORDER BY booking_time ASC;) T1 

LEFT OUTER JOIN 

(SELECT date_format(request_time, '%m-%Y') AS m, count(request_time) AS r 
FROM web_log 
WHERE 
    date(request_time) >= date_sub(curdate(), interval 12 month) 
AND 
    date(request_time) <= date_add(curdate(), interval 6 month) 
GROUP BY month(request_time) 
ORDER BY request_time ASC;) T2 

ON T1.m=T2.m 
ORDER BY T1.m 

输出将是:

m   b  r 
10-2013 15  null 
11-2013 6  null 
12-2013 13  null 
01-2014 10  null 
02-2014 10  null 
03-2014 25  45 
04-2014 1  35 
+0

谢谢,它的工作原理;-) – creg

相关问题