简体   繁体   English

更新语句和子查询

[英]Update statement and Subquery

I would like to use a Subquery to determine whether an update should be done on the OrderClosed status or not. 我想使用子查询来确定是否应该对OrderClosed状态进行更新。 But I can't seem to get this right. 但我似乎无法正确地做到这一点。

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 )

Or am I thinking to simple? 还是我想简单?

Try this: 尝试这个:

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 
 );`

Your where clause needs to have syntax like WHERE VARIABLE_NAME IN (LIST_OF_VARIABLE_NAME_VALUES) 您的where子句需要使用WHERE VARIABLE_NAME IN (LIST_OF_VARIABLE_NAME_VALUES)类的语法

You are trying to use syntax similar to WHERE (LIST_OF_MULTIPLE_VARIABLE_NAMES_AND_VALUES) 您正在尝试使用类似于WHERE (LIST_OF_MULTIPLE_VARIABLE_NAMES_AND_VALUES)语法WHERE (LIST_OF_MULTIPLE_VARIABLE_NAMES_AND_VALUES)

The syntax for a join in an update in SQL Server doesn't use a where clause. 对于语法joinupdate在SQL Server中不使用where的条款。 Try this: 尝试这个:

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;

Note the following two changes as well. 还要注意以下两个更改。 First, the left join is now an inner join , because you want matching records in invoice (based on the where clause). 首先, left join现在是inner join ,因为您要匹配invoice记录(基于where子句)。 And this version uses table aliases to simplify writing (and reading) the query. 并且此版本使用表别名来简化查询的编写(和读取)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM