将2个sql查询合并为一个,消除重复的列

时间:2016-09-29 06:53:20

标签: sql

我使用多个连接语句编写了2个sql查询。

现在我想将两个查询结果合并如下。 第一个查询显示这些列

UDC_ID, EXT_ID, VALUE

第二个查询显示了这些列

UDC_ID, EXT_ID, VALUE

UDC_IDEXT_ID个查询中,列相同,但每个列中的VALUE列不同

所以我要显示的最终输出是,

UDC_ID, EXT_ID, VALUE (From Query1), VALUE (from Query 2)

有人可以建议如何实现这一目标吗?

这些是我的疑问:

查询1加入三个表:

SELECT
  DEV.UDC_ID,
  SR.EXT_ID,
  SRA.VALUE
FROM SERVICE_REQUEST SR
JOIN DEVICE DEV
  ON SR.DEVICE_ID = DEV.ID
JOIN SERVICE_REQUEST_ATTR SRA
  ON SR.ID = SERVICE_REQUEST_ID
WHERE SR.SUB_TYPE_CD = 'HMI_22'
--AND DEV.SUB_TYPE = 'ESME'
AND SRA.NAME = 'CommsHubGUID'
AND SR.INSERT_TIME >= TO_DATE('2016-09-21 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND SR.INSERT_TIME <= TO_DATE('2016-09-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY SR.INSERT_TIME DESC;

查询1和此查询之间的区别是SRA.NAME字段的where子句标准,否则两个查询都相同。

SELECT
  DEV.UDC_ID,
  SR.EXT_ID,
  SRA.VALUE
FROM SERVICE_REQUEST SR
JOIN DEVICE DEV
  ON SR.DEVICE_ID = DEV.ID`enter code here`
JOIN SERVICE_REQUEST_ATTR SRA
  ON SR.ID = SERVICE_REQUEST_ID
WHERE SR.SUB_TYPE_CD = 'HMI_22'
--AND DEV.SUB_TYPE = 'ESME'
AND SRA.NAME = 'Service Location'
AND SR.INSERT_TIME >= TO_DATE('2016-09-21 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND SR.INSERT_TIME <= TO_DATE('2016-09-28 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY SR.INSERT_TIME DESC

1 个答案:

答案 0 :(得分:1)

SELECT COALESCE(q1.UDC_ID,q2.UDC_ID), 
      COALESCE(q1.EXT_ID, q2.EXT_ID),
      q1.VALUE , 
      q2.VALUE 
FROM (query 1) q1
     FULL OUTER JOIN (query 2) q2 ON q1.UDC_ID=q2.UDC_ID and q1.EXT_ID=q2.EXT_ID