将两个查询中的信息合并到一个表中

时间:2015-06-23 21:20:44

标签: mysql

查询1:

SELECT num_requerimiento, asunto 
FROM masivos_texto INNER JOIN envios_masivos
ON id_masivos=id_envio;

结果1:

+---------------------+---------------------+
|  num_requerimiento  |        asunto       |
|---------------------+----------------------
|      1800           |     inscripcion     |
|---------------------+---------------------+
|      1801           |     seguimiento     |
+---------------------+---------------------+

查询2:

SELECT id_envio, estatus, count(estatus)
FROM acuses_recibo
WHERE id_envio IN (SELECT id_masivos FROM cati_atencion.masivos_texto WHERE fecha >= '2014-01-01' AND fecha <= '2015-06-16') 
GROUP BY id_envio, estatus;

结果2:

+---------------------+---------------------+----------------------+
|     id_envio        |        estatus      |    count(estatus)    |
|---------------------+--------------------------------------------+
|        84           |          0          |         4031         |
|---------------------+---------------------+----------------------+
|        84           |          1          |          632         |
+---------------------+---------------------+----------------------+
|        85           |          0          |         35635        |
+---------------------+---------------------+----------------------+
|        85           |          1          |         3711         |
+---------------------+---------------------+----------------------+ 

期望的结果:

+---------------------+-----------------+------------+------------+-------------------+ 
|  num_requerimiento  |     asunto      |  id_envio  |  estatus   |  count(estatus)   | 
|---------------------+-----------------+------------+------------+-------------------+ 
|      1800           |   inscripcion   |     84     |     0      |      4031         |
|---------------------+-----------------+------------+------------+-------------------+ 
|      1800           |   inscripcion   |     84     |     1      |       632         | 
+---------------------+-----------------+------------+------------+-------------------+ 
|      1801           |   seguimiento   |     85     |     0      |       635         | 
+---------------------+-----------------+------------+------------+-------------------+ 
|      1801           |   seguimiento   |     85     |     1      |       711         |
+---------------------+-----------------+------------+------------+-------------------+ 
所需结果 与num_requerimiento 1800对应的id_envio / id_masivos为84, 和num_requerimiento 1801对应的id_envio / id_masivos是85, 和第二个表中的estatus不能比i.a.为了你的帮助。

UNION不起作用,它给我第一个表后跟第二个,并且只有当选择的列数相同时才会显示。

2 个答案:

答案 0 :(得分:0)

要使用SQL执行此操作,您需要一个与masivos_textoacuses_recibo表相关的表。我建议你创建一个表。你可以称之为req_id或任何合适的东西。这通常称为JOIN表。它将有这个内容

num_requerimiento    id_envio        
    1800               84
    1801               85

然后,您就可以适当地加入您的第一个和第二个查询。

如果不知道表格的行,就无法为您编写查询。

答案 1 :(得分:0)

解决!!我需要为每个SELECT使用别名,因为为每个选择级别添加别名,如下所示:

SELECT result1.num_requerimiento, result1.asunto, result1.id_masivos, result2.estatus, result2.conteo 
FROM 
(SELECT C.num_requerimiento, B.asunto, B.id_masivos 
FROM masivos_texto B INNER JOIN envios_masivos C
ON B.id_masivos=C.id_envio) as result1
INNER JOIN
(SELECT A.id_envio, A.estatus, count(estatus) as conteo 
from acuses_recibo A
WHERE A.id_envio IN (SELECT B.id_masivos FROM masivos_texto B where B.fecha >= '2014-01-01' AND B.fecha <= '2015-06-16')
GROUP BY A.id_envio, A.estatus) as result2
ON result1.id_masivos=result2.id_envio;

并生成所需的第3个表。希望它能帮助将来的某个人。