Ramesh Paul
Ramesh Paul

Reputation: 850

How to combine three different queries

I have three queries:

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'

How can I combine these three queries into single one to get result like this.

Tables may contain more than one row for each USERID for same status.

EVENT_TITLE | ORIG_START_DT | GREET_TITLE | BROADCAST_SCH_DT | POLL_TITLE | CREATE_DTTM

Upvotes: 1

Views: 162

Answers (2)

Mahmoud Gamal
Mahmoud Gamal

Reputation: 79889

Use UNION(implicit distinct) or UNION ALL like so:

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';

Update

If you want to get the data from these three queries in the form:

EVENT_TITLE | ORIG_START_DT | GREET_TITLE | BROADCAST_SCH_DT | POLL_TITLE | CREATE_DTTM

You can do this:

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

This will give you something like:

| 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 |
........

Note that: As far as I know, this query, this way, will cross join the three tables, since I didn't specify a JOIN condition, becuase you didn't determine in your question. If there is any relation between the three tables, specify a JOIN condtion using the ON clause.

Upvotes: 7

Gordon Linoff
Gordon Linoff

Reputation: 1269483

To get the results on one line, you want to use a join:

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'

This also makes it easier when you want to look at more users than just 1.

Upvotes: 1

Related Questions