1

3 つのクエリがあります。

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'

これら 3 つのクエリを 1 つのクエリに結合して、このような結果を得るにはどうすればよいですか。

テーブルには、同じステータスの 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';

アップデート

これら 3 つのクエリから次の形式でデータを取得する場合:

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

注意:私の知る限り、このクエリは、このように 3 つのテーブルをクロス結合しJOINます。これは、質問で判断しなかったため、条件を指定しなかったためです。3 つのテーブル間に関係がある場合は、句JOINを使用して条件を指定します。ON

于 2012-12-19T14:10:00.803 に答える
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 人だけでなく、より多くのユーザーを調べたい場合にも簡単になります。

于 2012-12-19T14:23:39.003 に答える