Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Update语句和子查询_Sql_Sql Update_Subquery - Fatal编程技术网

Sql Update语句和子查询

Sql Update语句和子查询,sql,sql-update,subquery,Sql,Sql Update,Subquery,我想使用子查询来确定是否应该对OrderClosed状态进行更新。但我似乎不能正确地理解这一点 Update Orders set orderclosed = 1 where ( SELECT dbo.orders.ordernr, dbo.orders.orderdate, dbo.orders.salesdate, dbo.orders.deliverydate, dbo.orders.orderclosed, dbo.invoices.invoi

我想使用子查询来确定是否应该对OrderClosed状态进行更新。但我似乎不能正确地理解这一点

Update Orders 
set orderclosed = 1 
where (
SELECT dbo.orders.ordernr, 
   dbo.orders.orderdate, 
   dbo.orders.salesdate, 
   dbo.orders.deliverydate, 
   dbo.orders.orderclosed, 
   dbo.invoices.invoicenr 
FROM   dbo.orders 
   LEFT OUTER JOIN dbo.invoices 
                ON dbo.orders.id = dbo.invoices.orderid 
WHERE  dbo.invoices.invoicenr IS NOT NULL 
   AND orderclosed = 0 )
还是我想简单点?

试试这个:

Update Orders 
 set orderclosed = 1 
 where ordernr in 
 (
     SELECT dbo.orders.ordernr
     FROM   dbo.orders 
     LEFT OUTER JOIN dbo.invoices 
         ON dbo.orders.id = dbo.invoices.orderid 
     WHERE  dbo.invoices.invoicenr IS NOT NULL 
     AND orderclosed = 0 
 );`
Update o 
    set orderclosed = 1 
FROM dbo.orders o JOIN
     dbo.invoices i
     ON o.id = i.orderid 
WHERE i.orderid IS NOT NULL AND orderclosed = 0;
where子句需要有类似于
where VARIABLE\u NAME IN(变量名值列表)


您正在尝试使用类似于
WHERE(多个变量名和值的列表)的语法
SQL Server中
更新
中的
连接的语法不使用
WHERE
子句。试试这个:

Update o 
    set orderclosed = 1 
FROM dbo.orders o JOIN
     dbo.invoices i
     ON o.id = i.orderid 
WHERE i.orderid IS NOT NULL AND orderclosed = 0;

还要注意以下两个变化。首先,
左联接
现在是一个
内部联接
,因为您希望在
发票
中找到匹配的记录(基于
where
子句)。这个版本使用表别名来简化查询的编写(和读取)。

@Lodendijk。我不知道为什么我漏掉了列名,但这显然是
where
子句所需要的。