簡體   English   中英

更新語句和子查詢

[英]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)

對於語法joinupdate在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM