2016-04-02 107 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