我有三个问题:
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
答案 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
这会给你类似的东西:
| 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时,这也会更容易。