[英]Update statement and 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.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
);`
您的where子句需要使用WHERE VARIABLE_NAME IN (LIST_OF_VARIABLE_NAME_VALUES)
類的語法
您正在嘗試使用類似於WHERE (LIST_OF_MULTIPLE_VARIABLE_NAMES_AND_VALUES)
語法WHERE (LIST_OF_MULTIPLE_VARIABLE_NAMES_AND_VALUES)
對於語法join
在update
在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;
還要注意以下兩個更改。 首先, left join
現在是inner join
,因為您要匹配invoice
記錄(基於where
子句)。 並且此版本使用表別名來簡化查詢的編寫(和讀取)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.