加入一个键上的两个表,然后离开外部加入一个表的一些标准

问题描述:

我试图在单个查询中一起加入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

对于我所知道的每一个派生表必须给一个名字;所以尝试是这样的:

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

试试这个:

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

你为什么不只是创建两个内部连接表。然后你就可以建立一个连接这观点使用左外连接匹配标准贸易表的查询。

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