2

クエリ内で外部結合から作成された「結合エンティティ」をどのように参照できますか? 具体的には、「??」をどのように置き換えることができますか? 以下のクエリで:

SELECT TableA.x, 
       ??.y --How do you select from the combined entity?
  FROM TableA, 
       TableB buys 
FULL OUTER JOIN TableB sells ON buys.run_id = sells.run_id 
                            AND buys.specie_id = sells.specie_id 
                            AND buys.account_id = sells.account_id
WHERE TableA.id = ?? 
  AND -- want to join this with the "combined entity" resulting from the outer join
      buys.buy = 'Y' 
  AND -- Is this valid or does this have to be within the Outer join statement?
      sells.buy = 'N';
4

3 に答える 3

3
select TableA.x, fullTable.y 
from TableA 
  INNER JOIN
    ( SELECT y
        FROM TableB buys
          full outer join TableB sells
            on buys.run_id = sells.run_id
            and buys.specie_id = sells.specie_id
            and buys.account_id = sells.account_id
            AND buys.buy = 'Y' AND sells.buy = 'N'    
    ) AS fullTable
    ON TableA.id = fullTable.y

The condition can be in the final WHERE or ON like this but it essentially cancels the full join:

select TableA.x, fullTable.y 
from TableA 
  INNER JOIN
    ( SELECT y
           , buys.buy AS buysBuy             --- fields here so they can be
           , sells.buy AS sellsBuy           --- used in the final WHERE or ON
        FROM TableB buys
          full outer join TableB sells
            on buys.run_id = sells.run_id
            and buys.specie_id = sells.specie_id
            and buys.account_id = sells.account_id                
    ) AS fullTable
    ON TableA.id = fullTable.y
    AND buysBuy = 'Y' AND sellsBuy = 'N'    --- the condition here
于 2011-06-21T14:52:05.397 に答える
2

おそらく、質問しようとしているのは、クエリの他の部分で結合に使用される列を参照する方法です。結合されたエンティティ自体はありません。テーブルの列を参照する必要があります (この場合、「買い」または「売り」です。たまたま、結合で使用される列が両方のテーブルで同じ値を持つことになります。

null でない方が必要な場合 (これは完全な外部結合であるため)、coalesceまたはを使用nvlして、null 以外の値を見つけることができます。

SELECT TableA.x, 
       nvl(buys.run_id,sells.run_id) as run_id,
       ...
于 2011-06-21T14:54:31.593 に答える
1

外部結合内にsells.buy = 'N'and述語が必要です。buys.buy = 'Y'

SELECT TableA.x, 
       ??.y --How do you select from the combined entity?
  FROM TableA, 
INNER JOIN TableB buys ON <whatever>
                      AND buys.buy = 'Y' 
FULL OUTER JOIN TableB sells ON buys.run_id = sells.run_id 
                            AND buys.specie_id = sells.specie_id 
                            AND buys.account_id = sells.account_id
                            AND sells.buy = 'N'

について??.yは、必要なテーブルを指定する必要があります - TableAbuyまたはsell.

于 2011-06-21T14:56:11.183 に答える