1

SQLite DB からのクエリに Java java.sql.* を使用しています。sqlString を次のように記述しているという問題が見つかりました。

SELECT n.Name as Name, 
       c.Value as Value0, 
       d.Value as Value1 
FROM  (Table1 c inner join Table2 n on c.NameID = n.ID),
      Table3 d 
WHERE c.RunID = 1 
      and d.RunID = 2 
      and c.NameID = d.NameID

このステートメントstmt.executeQuery(sqlQuery)は、次の例外をスローします。

java.sql.SQLException: no such column: n.Name
at org.sqlite.DB.throwex(DB.java:288)
at org.sqlite.NativeDB.prepare(Native Method)
at org.sqlite.DB.prepare(DB.java:114)
at org.sqlite.Stmt.executeQuery(Stmt.java:89).............

Nameは既に Table2 テーブルの一部です。同じステートメントが SQLite コマンド プロンプトから正常に機能しています。しかし、開き括弧を削除してJavaから実行しようとすると、問題はありません。なぜこれが起こるのか考えていますか?

4

3 に答える 3

0

このようなことを試して、サブ結果セットを使用してください

SELECT rs1.Name AS NAME, 
       rs1.Value0 AS Value0, 
       d.Value AS Value1 
FROM  (SELECT n.Name AS NAME, 
       c.Value AS Value0, 
       d.Value AS Value1 
       FROM Table1 c INNER JOIN Table2 n ON c.NameID = n.ID) rs1,
      Table3 d 
WHERE c.RunID = 1 
      AND d.RunID = 2 
      AND c.NameID = d.NameID
于 2012-07-04T12:06:56.437 に答える
0

こんにちは友達 素早い回答ありがとうございます。私はこの問題を解決することができます。私はこれを共有しているので、他の誰かがこの問題を抱えている場合、これを行うことができます:

SELECT ABC.Name as Name, ABC.Value as Value0, d.Value as Value1
  FROM
  (select n.Name as Name, c.Value as Value0 from Table1 c
   inner join Table2 n on c.NameID = n.ID) AS ABC,
Table3 d ......;

よろしく、トール

于 2012-07-04T12:10:37.003 に答える
0

内部クエリで使用される変数は、外部で参照できませんでした。たとえば、内部 SQL で変数 n を使用したとします。しかし、あなたはそれを外部に言及しています。変数 n はその範囲外です。

于 2012-07-04T12:03:50.867 に答える