MySQL 将两个查询合并为一个查询

标签 mysql sql join union

我的第一个查询如下所示

SELECT a.name, b.desc, T3.desc1 as Output
FROM table1 a INNER JOIN
     table2 b
     ON a.id = b.id
INNER JOIN (
  SELECT b2.id, b2.status,  MAX(b2.created_time) as max_time
  FROM q_scan b2
  GROUP BY b2.id  ,  b2.qualys_type
  ) t on t.id = a.id
      AND  t.status=b.status
      AND t.max_time = b.created_time
INNER JOIN table3 T3 on b.tid = T3.tid
WHERE b.status = 'FAIL'

我的第二个查询如下所示

SELECT a.name, b.desc, T4.desc2 as Output
FROM table1 a INNER JOIN
     table2 b
     ON a.id = b.id
INNER JOIN (
  SELECT b2.id, b2.status,  MAX(b2.created_time) as max_time
  FROM q_scan b2
  GROUP BY b2.id  ,  b2.qualys_type
  ) t on t.id = a.id
      AND  t.status=b.status
      AND t.max_time = b.created_time
INNER JOIN table4 T4 on b.tid = T4.tid
WHERE b.status = 'FAIL'

在我的最终结果中,我想要输出列,其中包含来自T3.desc1T4.desc2的值 如何将两个查询合并为一个查询?

最佳答案

如果 table2.id 存在于其中一个表 - table3table4 中,则为 LEFT JOIN将在 IFNULL() 的帮助下简化查询。

SELECT  a.name, 
        b.desc, 
        IFNULL(T3.desc1, T4.desc2) as Output
FROM    table1 a 
        INNER JOIN table2 b ON a.id = b.id
        INNER JOIN 
        (
            SELECT b2.id, b2.status,  MAX(b2.created_time) as max_time
            FROM oac.qualys_scan b2
            GROUP BY b2.id  ,  b2.qualys_type
        ) t on t.id = a.id
              AND  t.status=b.status
              AND t.max_time = b.created_time
        LEFT JOIN table3 T3 on b.tid = T3.tid
        LEFT JOIN table4 T4 on b.tid = T4.tid
WHERE   b.status = 'FAIL'

关于MySQL 将两个查询合并为一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023543/

相关文章:

sql - 尝试加入 Access 时出现语法错误

mysql_result 返回文件名作为结果

mysql select * from <表名>

mysql - 使用哪个外键引用表?

sql - 使用 xp_cmdshell 的 T-SQL FTP

php - SQL/PHP 如何验证日期是否在日期范围之间?

java - 将 @EmbeddedId 表示为 H2 数据库的 SQL

Mysql在一条语句中使用left join删除多个表导致FK违规

php - 一个连接所有,OOP PHP

sql - 如何在按时间顺序排序的单个表中加入成对的记录(使用 MySQL)