2016-01-25 204 views
1

我有一行代碼,應該有日期的輸出,但它說我的SQL報告:子查詢返回多個1行

子查詢返回多個行

這裏我的代碼:

try 
{ 
    String contract = "UPDATE vsl375 SET " 
    + "contract = (SELECT disdate FROM embarkationdetails " 
    + "WHERE vsl375.crewid = embarkationdetails.CrewId)"; 

    pst = conn.prepareStatement(contract); 
    pst.execute(); 

} 
catch (SQLException e) {JOptionPane.showMessageDialog(null, e);} 

我希望我的輸出是這樣的:

ID_Number 
--------- 
1 
2 
3 

DATE 
---- 
01/25/2016 
01/25/2016 
01/26/2016 
+0

您確定你的查詢是正確的嗎?它將更新vs1375表的所有條目。 – Limit

+0

是的,這是我想要處理的表 – user3913154

+0

您正在使用哪種RDBMS? SQL Server,Oracle,MySql,PostgreSQL,...?這一點很重要,因爲每個產品都有自己的SQL實現,這些實現可以與其他產品大不相同。 –

回答

0

您在UPDATE中的子查詢不會以這種方式工作 - 它應該只返回一個值,然後將該單個值寫入每個目標行(在您的情況下,所有行)。這是而不是評估每個目標行。

根據您使用的數據庫類型,您可以使用UPDATE ... FROM(請注意,這不是標準的SQL語法)或MERGE來執行您所需的操作。

MERGE INTO vsl375 tgt 
    USING embarkationdetails src 
    ON (tgt.crewid = src.CrewId) 
    WHEN MATCHED THEN UPDATE SET contract = src.disdate;