如何组合三个不同的查询

时间:2012-12-19 14:08:16

标签: mysql sql

我有三个问题:

SELECT EVENT_TITLE, ORIG_START_DT FROM EVENT_MAIN WHERE USERID='4' AND EVENT_STATUS='P'
SELECT GREET_TITLE, BROADCAST_SCH_DT FROM GREET_MAIN WHERE USERID='4' AND GREET_STATUS='P'
SELECT POLL_TITLE,CREATE_DTTM FROM POLL_MAIN WHERE USERID='4' AND POLL_STATUS='P'

如何将这三个查询合并为一个查询,以获得这样的结果。

对于相同的状态,每个USERID可能包含多个行。

EVENT_TITLE | ORIG_START_DT | GREET_TITLE | BROADCAST_SCH_DT | POLL_TITLE | CREATE_DTTM

2 个答案:

答案 0 :(得分:7)

使用UNION(隐式不同)或UNION ALL,如下所示:

SELECT 
  EVENT_TITLE "Title", 
  ORIG_START_DT "DT"
FROM EVENT_MAIN WHERE USERID='4' AND EVENT_STATUS = 'P'
UNION ALL
SELECT 
  GREET_TITLE, 
  BROADCAST_SCH_DT 
FROM GREET_MAIN WHERE USERID='4' AND GREET_STATUS = 'P'
UNION ALL
SELECT 
  POLL_TITLE,
  CREATE_DTTM 
FROM POLL_MAIN  WHERE USERID='4' AND POLL_STATUS   = 'P';

更新

如果您想以以下形式从这三个查询中获取数据:

EVENT_TITLE | ORIG_START_DT | GREET_TITLE | BROADCAST_SCH_DT | POLL_TITLE | CREATE_DTTM

你可以这样做:

SELECT  
  EVENT_TITLE , 
  ORIG_START_DT ,
  GREET_TITLE, 
  BROADCAST_SCH_DT,
  POLL_TITLE,
  CREATE_DTTM
FROM
(
  SELECT * 
  FROM EVENT_MAIN
  WHERE USERID='4' AND EVENT_STATUS = 'P'
) t1
INNER JOIN
(
  SELECT *
  FROM GREET_MAIN
  WHERE USERID='4' AND GREET_STATUS = 'P'
) t2
INNER JOIN 
(
  SELECT * 
  FROM POLL_MAIN
  WHERE USERID='4' AND POLL_STATUS = 'P'
) t3

SQL Fiddle Demo

这会给你类似的东西:

| EVENT_TITLE | ORIG_START_DT | GREET_TITLE | BROADCAST_SCH_DT | POLL_TITLE | CREATE_DTTM |
-------------------------------------------------------------------------------------------
|      Title4 |           O44 |        DTdd |              O44 |    ddsfTdd |         O44 |
|      Title4 |           O33 |        DTdd |              O44 |    ddsfTdd |         O44 |
........

请注意:据我所知,这种查询会以三种方式交叉连接,因为我没有指定JOIN条件,因为你没有'在你的问题中确定。如果三个表之间存在任何关系,请使用JOIN子句指定ON条件。

答案 1 :(得分:1)

要在一行中获得结果,您需要使用连接:

SELECT EVENT_TITLE, ORIG_START_DT, GREET_TITLE, BROADCAST_SCH_DT, POLL_TITLE,CREATE_DTTM
FROM EVENT_MAIN em join
     GREET_MAIN gm
     on em.userid = gm.userid join
     POLL_MAIN pm
     on em.userid = pm.userid
WHERE em.EVENT_STATUS='P' and
      gm.GREET_STATUS='P' and
      pm.POLL_STATUS='P' and
      em.USERID = '4'

当您想要查看的用户数量超过1时,这也会更容易。