Java 子查询返回的行数超过1行

Java 子查询返回的行数超过1行,java,sql,netbeans,Java,Sql,Netbeans,我有一行代码应该输出日期,但它在我的SQL报告中说: 子查询返回的行数超过1行 这是我的密码: try { String contract = "UPDATE vsl375 SET " + "contract = (SELECT disdate FROM embarkationdetails " + "WHERE vsl375.crewid = embarkationdetails.CrewId)"; pst = conn.prepareStatement(c

我有一行代码应该输出日期,但它在我的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

UPDATE
中的子查询不是这样工作的-它应该只返回一个值,然后在每个目标行(在您的情况下,是所有行)中写入该值。它不是针对每个目标行计算的

根据您使用的数据库类型,您可以使用
UPDATE。。。从
(请注意,这不是标准的SQL语法)或合并,执行所需操作

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

UPDATE
中的子查询不是这样工作的-它应该只返回一个值,然后在每个目标行(在您的情况下,是所有行)中写入该值。它不是针对每个目标行计算的

根据您使用的数据库类型,您可以使用
UPDATE。。。从
(请注意,这不是标准的SQL语法)或合并,执行所需操作

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

您确定您的查询正确吗?它将更新vs1375表的所有条目。是的,这就是我想对该表执行的操作。您正在使用哪些RDBMS?SQL Server、Oracle、MySql、PostgreSQL等等。。。?这一点很重要,因为每个产品都有自己的SQL实现,与其他产品有很大不同。您确定您的查询是正确的吗?它将更新vs1375表的所有条目。是的,这就是我想对该表执行的操作。您正在使用哪些RDBMS?SQL Server、Oracle、MySql、PostgreSQL等等。。。?这一点很重要,因为每个产品都有自己的SQL实现,与其他产品有很大的不同。