2011-11-14 34 views
2

問題是,兩個表都有主鍵,至今我還沒有任何其他標準SELECTS/INSERTS存在任何問題。我剛接觸JOINS,但我不明白爲什麼這不起作用。PostgreSQL中INNER JOIN查詢中'沒有主鍵'錯誤

我收到此錯誤信息:

org.postgresql.util.PSQLException: No primary key found for table devicetable. 

但是,兩個表的主鍵是我選擇的列:deviceid/username。也許這跟它有關係?

我通過JDBC

PreparedStatement query = curSQL.getConn().prepareStatement("SELECT devicetable.pushid FROM devicetable, usertable WHERE usertable.username=? AND usertable.deviceid = devicetable.deviceid", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
query.setString(1, username); 
ResultSet rs = query.executeQuery(); 

if (rs.next()){ 
    rs.updateString("pushid", pushID); 
    rs.updateRow(); 
} 

rs.close(); 
query.close(); 

訪問它使用SQL:

SELECT devicetable.pushid FROM devicetable, usertable 
WHERE usertable.username=? 
AND usertable.deviceID = devicetable.deviceID 
+1

您是否嘗試過使用顯式連接? 'FROM devicetable JOIN usertable ON usertable.deviceID = devicetable.deviceID'並從WHERE子句中移除'usertable.deviceid = devicetable.deviceid'部分。 –

+0

這是工作!把它作爲答案,我會接受它。 – user705142

+1

有趣的是,我最初把它作爲一個答案(因此我的答案是時間戳),但我選擇刪除它並改爲發表評論。無論如何,我放棄了我的答案。 –

回答

2

嘗試顯式連接:

SELECT devicetable.pushid 
FROM devicetable 
JOIN usertable ON usertable.deviceID = devicetable.deviceID 
WHERE usertable.username = ? 
1

在SELECT JOIN子句無關對主鍵進行任何操作。您不需要爲任何 SELECT查詢定義主鍵。

副作用可能是您獲得重複行,但完全是另一回事。

實際上,在您的查詢中有no顯式連接。你可以重寫用顯式查詢JOIN這樣相當於:

SELECT devicetable.pushid 
FROM devicetable 
JOIN usertable USING (deviceID) 
WHERE usertable.username=? 

瞭解更多關於JOIN syntax in the manual