[英]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. 对于语法join
在update
在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.