在一个键上连接两个表,然后在外部连接一个表,用于许多条件

时间:2012-02-17 15:29:54

标签: sql oracle

我试图在一个查询中将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命令没有正确结束错误。 任何帮助表示赞赏。 感谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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`

答案 2 :(得分:0)

为什么不创建两个内部联接表视图。然后,您可以使用左外连接匹配条件构建一个将视图连接到交易表的查询。

在我看来,观点是许多复杂查询的最容易被忽视的解决方案之一。