2012-02-17 30 views
0

我試圖在單個查詢中一起加入3個表。前兩個有一個鍵,所以每個條目都有一個匹配的條目。然後這個連接表將由第三個表連接,該表可以爲第一個表(連接表)中的每個條目生成多個條目。加入一個鍵上的兩個表,然後離開外部加入一個表的一些標準

select * from 
(select a.bidentifier, a.bsession, a.symbol, b.jidentifier, b.JSession 
from trade_monthly a, trade_monthly_second b 
where 
a.bidentifier = b.jidentifier AND 
a.bsession = b.JSession) 
left outer join 
trade c 
on c.symbol = a.symbol 
order by a.bidentifier, a.bsession, a.symbol, b.jidentifier, b.JSession, c.symbol 

左外連接上會有更多條件(不僅僅是c.symbol = a.symbol),但現在這應該是有用的。我如何以這種方式嵌套查詢?我剛開始SQL命令沒有正確結束的錯誤。 任何幫助表示讚賞。 謝謝

+0

Oracle是否需要以分號結尾的語句? – simchona 2012-02-17 15:33:08

回答

1

對於我所知道的每一個派生表必須給一個名字;所以嘗試是這樣的:

SELECT * FROM 
    (SELECT a.bidentifier, .... 
    ... 
    a.bsession = b.JSession) t 
LEFT JOIN trade c 
    ON c.symbol = t.symbol 
ORDER BY t.bidentifier, ... 

無論如何,我認爲你可以使用一個簡單的查詢:

SELECT a.bidentifier, a.bsession, a.symbol, b.jidentifier, b.JSession, c.* 
FROM trade_monthly a 
INNER JOIN trade_monthly_second b 
    ON a.bidentifier = b.jidentifier 
    AND a.bsession = b.JSession 
LEFT JOIN trade c 
    ON c.symbol = a.symbol 
ORDER BY a.bidentifier, a.bsession, a.symbol, b.jidentifier, b.JSession, c.symbol 
+0

@ user1216565:看看我編輯的答案,並讓我知道它是否有效。 – Marco 2012-02-17 15:42:40

+0

那麼每個派生表都必須被賦予一個名稱,有些子查詢的類型不需要名稱,但是如果您將它用作表,那麼它必須有一個表名。 – HLGEM 2012-02-17 15:45:22

+0

@HLGEM:感謝您的評論,這是正確的!我編輯了我的答案。再次感謝:) – Marco 2012-02-17 15:50:13

0

試試這個:

SELECT 
    `trade_monthly`.`bidentifier` AS `bidentifier`, 
    `trade_monthly`.`bsession` AS `bsession`, 
    `trade_monthly`.`symbol` AS `symbol`, 
    `trade_monthly_second`.`jidentifier` AS `jidentifier`, 
    `trade_monthly_second`.`jsession` AS `jsession` 
FROM 
(
    (
    `trade_monthly` 
    JOIN `trade_monthly_second` ON(
     (
      (
       `trade_monthly`.`bidentifier` = `trade_monthly_second`.`jidentifier` 
      ) 
      AND(
       `trade_monthly`.`bsession` = `trade_monthly_second`.`jsession` 
      ) 
     ) 
    ) 
) 
    JOIN `trade` ON(
    (
     `trade`.`symbol` = `trade_monthly`.`symbol` 
    ) 
) 
) 
    ORDER BY 
    `trade_monthly`.`bidentifier`, 
    `trade_monthly`.`bsession`, 
    `trade_monthly`.`symbol`, 
    `trade_monthly_second`.`jidentifier`, 
    `trade_monthly_second`.`jsession`, 
    `trade`.`symbol` 
+0

這一個給我一個缺少選擇關鍵字錯誤 – user1216565 2012-02-17 15:57:11

+0

我改變了它,它現在失效。 – kenik 2012-02-17 16:54:45

+0

嗯..現在我只是得到一個表或視圖不存在代碼 – user1216565 2012-02-17 17:07:55

0

你爲什麼不只是創建兩個內部連接表。然後你就可以建立一個連接這觀點使用左外連接匹配標準貿易表的查詢。

在我看來,意見是最容易被忽視的解決方案之一,許多複雜的查詢。