2016-04-02 66 views
-1

在我们的查询中,我们有2个我们想要加入的表格。但是,我们得到以下错误:无法加入2个表格

org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry 
for table "component" Position: 48 at 
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) 
    at 
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:286) at datab.Datab.testDB(Datab.java:73) at datab.Datab.main(Datab.java:60) 

这里是我的代码:

public static void testDB(Connection con){ 
    //RUN AN EXAMPLE QUERY 
    try { 
    if (!con.isClosed()) 
    { 
     Statement st = con.createStatement(); 
     String query = "SELECT * FROM \"Component\" inner join \"Kind\" on Component.Kind_ID = Kind.ID"; 
     ResultSet rs = st.executeQuery(query);     

     while (rs.next()) 
     {     
     System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3));        
     } 
    }      
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 
+4

另一个很好的例子,为什么加引号的标识符是不是一个好主意。 –

回答

7

这是你的SQL语句:

SELECT * 
FROM "Component" 
    inner join "Kind" on Component.Kind_ID = Kind.ID 

表名"Component"component不同的表名。一旦你开始使用那些可怕的引用标识符,你必须使用它们无处不在。你没告诉我们你的表定义,但我怀疑你还需要引用的列名:

SELECT * 
FROM "Component" 
    inner join "Kind" on "Component"."Kind_ID" = "Kind"."ID" 

如果你可以改变这一点,我强烈建议重新创建表使用双引号。

更多关于带引号的标识符的详细信息都在手册中:
http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

+0

不应该有那些''Component''没有双引号? –

+0

@MarkRotteveel:不是根据错误信息。 –

+0

嗨马克,Netbeans希望我们这样的表名称\“表名\” – ssjmessi10