1

我有三个疑问:

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
4

2 回答 2

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 小提琴演示

这会给你类似的东西:

| 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子句指定条件。

于 2012-12-19T14:10:00.803 回答
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 个时,这也使您更容易。

于 2012-12-19T14:23:39.003 回答