Reputation: 850
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
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';
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
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
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