繁体   English   中英

在一个键上联接两个表,然后在多个条件下左外联接一个表

[英]Joining two tables on a key and then left outer joining a table on a number of criteria

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

据我所知,每个派生表都必须命名。 所以尝试这样的事情:

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

尝试这个:

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`

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM