-1

3 つのテーブルからデータを取得するこの SQL クエリがあります。table3 から列を取得できません。問題は何ですか?

SELECT table1.col1        COUNTRY,
   table2_alias1.col3 STATE,
   table2.GEOG_LOCATION,
   table2.GEOG_LOCATION_pRE,
   table2.T2col4,
   table2.T2col5,
   TABLE3_ALIAS1.ZIP,
   TABLE3_ALIAS1.T3col2,
   TABLE3_ALIAS1.T3col3,
   TABLE3_ALIAS1.T3col4
FROM   table1,
   table2 table2_alias1,
   table2,
   (SELECT *
         FROM   table3
         WHERE  ( col5 = 'XXX'
                   OR col5 = 'YYY' )
                AND col6 = 'ZZZ')TABLE3_ALIAS1
      WHERE  table1.col3 = 'AAA'
              AND table1.col1 = table2_alias1.STATE
              AND table2_alias1.STATE = table2.col7(+)
              AND table2.STATE = TABLE3_ALIAS1.col6(+) 
ORDER BY 
2,
4,
10,
 9

サンプル出力 (意味のある COL 名として最も IMP データを強調表示)

 COUNTRY|STATE| GEOG_LOCATION   | T2COL2   | T2col3 | t2col4 | zip | T3col2 |T3col4

 USA       CA     LosAngls       LosAngls-1   0        y      90001
 USA       CA     SanFrans       SanFrans-4   0        y      94101
 USA       CA     Freemont       Freemont-A   0        n      94538

最初の 5 列のみにデータがあり、クエリの実行時に (table3 から取得した) zip を含む列以降にはデータが含まれていません。

RDBMS

 TABLE1          TABLE2             TABLE3 

 T1_COL1         GEOG_LOCATION          T3_COL1 
 GEOG_LOCATION        T2_COL2       T3_COL2
 T1_COL3         GEOG_LOCATION_pRE      GEOG_LOCATION
 T1_COL4         T2_COL4        T3_COL4
 T1_COL5         T2_COL5        T3_COL5
 T1_COL6         T2_COL6        T3_COL6
 T1_COL7         T2_COL7        T3_COL7
 T1_COL8         T2_COL8        T3_COL8
 T1_COL9         T2_COL9        T3_COL9
 T1_COL10                   T3_COL10

3 つのテーブルは、HHH で始まる列によってリンクされています。それらは同じデータを共有します。FFF で始まる列 (表 2 の 3 番目) は、表 2 の 1 番目の列 (HHH_col1) と再帰関係にあります。

4

1 に答える 1

2

ネストされたクエリを単独で実行してみてください。

     SELECT *
     FROM   table3
     WHERE  ( col5 = 'XXX'
               OR col5 = 'YYY' )
            AND col6 = 'ZZZ'

データは戻ってきますか?

また、安全のために、上記のクエリの列名の前にテーブル名を付ける価値があるかもしれません。

次に、それを table2 に結合してみます。

     SELECT *
     FROM   table3, table2
     WHERE  ( col5 = 'XXX'
               OR col5 = 'YYY' )
            AND col6 = 'ZZZ'
            AND table2.col3 = table3.col6(+)

... など、データが失われるまで、一度に 1 ステップずつクエリを再構築します。次に、どのステップが原因であるかを知っています...

于 2012-06-27T18:32:50.870 に答える