Sql Update语句和子查询
我想使用子查询来确定是否应该对OrderClosed状态进行更新。但我似乎不能正确地理解这一点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
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
子句所需要的。