2

このコードがあり、構文エラーが発生し続けます。

query = "SELECT * "+
"FROM Product " +
"INNER JOIN Orders ON (Product.ItemID=Orders.ItemID) " +
"LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
"WHERE Product.Receiver = 'Fred' " +
"ORDER BY Product.ItemName";    

DefaultTableModel data = table.getQuery(query);

INNER JOINの代わりに も試しましたLEFT OUTER JOIN。私が今までに試したことはありません。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing     operator) in query expression '(Product.ItemID=Orders.ItemID) LEFT OUTER JOIN  SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID'.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source)

ここで何が欠けているのか、3 つのテーブルを結合するにはどうすればよいですか。

4

2 に答える 2

2

次のように括弧を使用してみてください。

query = "SELECT * "+
        "FROM (Product " +
        "INNER JOIN Orders ON (Product.ItemID=Orders.ItemID)) " +
        "LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
        "WHERE Product.Reciever = 'Fred' " +
        "ORDER BY Product.ItemName";  
于 2013-08-08T13:41:48.397 に答える
0

JDBC が結合の順序を解析するのに問題があるようです。これはおそらく、操作しているデータベース エンジンに固有の問題ですが、いずれにしても、括弧を使用して結合操作の順序を指定すれば、どのエンジンでもクエリを正しく解析できるはずです。

query = "SELECT * "+
"FROM (Product " +
"INNER JOIN Orders ON (Product.ItemID=Orders.ItemID)) " +
"LEFT OUTER JOIN SupplierProduct ON (Orders.ItemID=SupplierProduct.ItemID) "+
"WHERE Product.Reciever = 'Fred' " +
"ORDER BY Product.ItemName";    

DefaultTableModel data = table.getQuery(query);

詳細:

基本的には、各結合を分離して、多かれ少なかれスタンドアロンのテーブルとして解釈できるようにするという考え方です。これは、より完全に区別するのに役立ちます

SELECT * 
FROM (Table1 JOIN Table2 ON Table1.a = Table2.a) 
     JOIN Table3 on Table3.b = Table2.b

から

SELECT * 
FROM Table1 
     JOIN (Table2 JOIN Table3 on Table3.b = Table2.b) ON Table1.a = Table2.a

また、次のように、最初の結合の結果をエイリアスする必要がある可能性があることに注意してください。

SELECT * 
FROM (Table1 JOIN Table2 ON Table1.a = Table2.a) as join1 
     JOIN Table3 on Table3.b = join1.b
于 2013-08-08T13:42:27.780 に答える