0

現在、2 つの SQL クエリを 1 つに結合したいと考えています。これは SQL に少し似ています: query の結果を取得し、それを別の - 結合で使用します。次の 2 つのクエリがあるとします。

SQL ステートメント

1.) SELECT * 
    FROM (SELECT B.example1  
          FROM EXAMPLE1A A  
          INNER JOIN EXAMPLE1B B ON A.ID = B.ID  
          WHERE A.ABC ='ABC' 
          ORDER BY A.ORDER_BY ) as colstate

2.) SELECT colstate 
    FROM EXAMPLE_TABLE 
    WHERE EFG LIKE '%' 
      AND BGTHAN >= '1' 
      AND SMTHAN <= '100' 
    ORDER BY ORDER_BY ASC

クエリ 1.) の結果をクエリ 2.) の colstate (列ステートメント) として使用したい。しかし:

私が試したことは次のとおりです。

SELECT (SELECT B.example1  
        FROM EXAMPLE1A A  
        INNER JOIN EXAMPLE1B B 
           ON A.ID = B.ID  
        WHERE A.ABC ='ABC' 
        ORDER BY A.ORDER_BY ) 
FROM EXAMPLE_TABLE 
WHERE EFG LIKE '%' 
  AND BGTHAN >= '1' 
  AND SMTHAN <= '100' 
ORDER BY ORDER_BY ASC

そして、それはError: Scalar subquery is only allowed to return a single rowであることが判明しました。「=」を「IN」に置き換えるにはどうすればよいですか? それとも私の発言は完全に間違っていますか?

4

2 に答える 2

0

エラーは、列ステートメントとして使用しているクエリは最大で 1 つの行を返さなければならないことを示しています。

おそらく次のようになります。

SELECT (SELECT B.example1  
        FROM EXAMPLE1A A  
        INNER JOIN EXAMPLE1B B 
           ON A.ID = B.ID  
        WHERE A.ABC ='ABC' 
          AND A.SOME_COLUMN = E.SOMECOLUMN // retrieve only relevant data for this row
        ORDER BY A.ORDER_BY ) 
FROM EXAMPLE_TABLE E 
WHERE EFG LIKE '%' 
  AND BGTHAN >= '1' 
  AND SMTHAN <= '100' 
ORDER BY ORDER_BY ASC
于 2013-11-07T07:48:12.313 に答える
0

「2 つのクエリを 1 つに結合する」 - これは適切な仕様ではありません。FLAT 2 次元テーブルとして正確に取得したいものを見つけてください。ネストされた SELECT は、内側の SELECT が親の行に 1 つの値しか設定できないネストされたループと考えてください。このような:

[Outer loop - parent row]
    [Inner loop - children rows]
        // all you can do here is change a single parent's field to anything
        // like constant/sum/avg/topmost/ugly-subquery-returning-a-single-result
    [/Inner loop]
[/Outer loop]
于 2013-11-07T08:09:30.073 に答える