Соединение двух таблиц по ключу, а затем оставление внешнего соединения в таблице по ряду критериев - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь объединить 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 ]

1 голос
/ 17 февраля 2012

Для того, что я знаю, каждая производная таблица должна иметь имя; так что попробуйте что-то вроде этого:

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 голосов
/ 17 февраля 2012

Почему бы вам просто не создать представление из двух внутренних соединенных таблиц .Затем вы можете создать запрос, который объединит эту view с таблицей trade , используя левое внешнее объединение критерий соответствия.

По моему мнению,Представления являются одним из самых игнорируемых решений для множества сложных запросов.

0 голосов
/ 17 февраля 2012

Попробуйте это:

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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...