2016-02-01 31 views
0

我使用H2-1.4.191.jar DB和有這樣的SQL:H2 DBсross加入不執行

SELECT * FROM ((SELECT A.COL AS AC_1, B.COL AS BC_1 FROM A, B WHERE AC_1 = 'someconst') CROSS JOIN (SELECT A.COL AS AC_2, B.COL AS BC_2 FROM A, B WHERE AC_2 = 'another_const')) WHERE BC_1 <> BC_2 LIMIT 1 

H2DB放在內存中,並嵌入DB在我的Java應用程序。當我嘗試執行SQL時,出現以下異常:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement " SELECT * FROM ((SELECT A.COL AS AC_1, B.COL AS BC_1 FROM A, B WHERE AC_1 = 'some_const') CROSS[*] JOIN (SELECT A.COL AS AC_2, B.COL AS BC_2 FROM A, B WHERE AC_2 = 'some_another_const')) WHERE BC_1 <> BC_2 LIMIT 1"; expected "UNION, MINUS, EXCEPT, INTERSECT, ORDER, OFFSET, FETCH, LIMIT, FOR,)"; 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
at org.h2.message.DbException.getSyntaxError(DbException.java:205) 
at org.h2.command.Parser.getSyntaxError(Parser.java:535) 
at org.h2.command.Parser.read(Parser.java:3170) 
at org.h2.command.Parser.readTableFilter(Parser.java:1170) 
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884) 
at org.h2.command.Parser.parseSelectSimple(Parser.java:2032) 
at org.h2.command.Parser.parseSelectSub(Parser.java:1878) 
at org.h2.command.Parser.parseSelectUnion(Parser.java:1699) 
at org.h2.command.Parser.parseSelect(Parser.java:1687) 
at org.h2.command.Parser.parsePrepared(Parser.java:443) 
at org.h2.command.Parser.parse(Parser.java:315) 
at org.h2.command.Parser.parse(Parser.java:291) 
at org.h2.command.Parser.prepareCommand(Parser.java:252) 
at org.h2.engine.Session.prepareLocal(Session.java:560) 
at org.h2.engine.Session.prepareCommand(Session.java:501) 
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) 
at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:73) 
at generation.db.QueryMaker.exec(QueryMaker.java:139) 

在SQLite中,所有工作都正常。 我應該怎麼做才能使它在H2中工作?

回答

0

此查詢,而無需外部支架正常工作:

SELECT * FROM (SELECT A.COL AS AC_1, B.COL AS BC_1 FROM A, B WHERE AC_1 = 'someconst') CROSS JOIN (SELECT A.COL AS AC_2, B.COL AS BC_2 FROM A, B WHERE AC_2 = 'another_const') WHERE BC_1 <> BC_2 LIMIT 1