簡體   English   中英

從同一表/多個列表和項目進行SQL更新

[英]SQL update from same table / multiple lists and items

我需要更新一個看起來像這樣的表:

No.    Item    Location        Score     Available     Price   some_more_text
1      Water   London                                  0,00
1      Water   Amsterdam       1         yes           1,11    alpha
1      Water   Burges          1         yes           1,11    alpha
2      Honey   London                                  0,00
2      Honey   Amsterdam       5         yes           5,55    omega
2      Honey   Burges          5         yes           5,55    omega
3      Spoon   London          4         yes           3,33    gamma
3      Spoon   Amsterdam       4         yes           3,33    gamma
3      Spoon   Burges          4         yes           3,33    gamma
4      Books   London                                  0,00
4      Books   Amsterdam       1         no            2,55    alpha
4      Books   Burges          1         no            2,55    alpha
5      Juice   London                                  0,00
5      Juice   Amsterdam       5         yes           5,55    beta
5      Juice   Burges          5         yes           5,55    beta
...

最后,Londen中的每個項目都應與Burges中的相應項目具有相同的屬性(或阿姆斯特丹,無關緊要)。 因為有這么多,這不能手動完成-但我找不到找到以某種方式“分批” SQL命令以更新具有相同編號的每個項目的方法。

另一個問題:由於它是專有軟件,所以我不能肯定地說出使用哪種語言-但我認為它是Oracle。

您可以將表本身加入更新中。

UPDATE table_X lon, table_X bur
SET lon.item=bur.item, lon.score=bur.score, etc
WHERE lon.No=bur.NO AND lon.location="London" AND bur.location="Burges";

從而使用Burges的數據更新了倫敦

如果實際上是SQL Server:

update lon 
set lon.item = bur.item, lon.score = bur.score, etc
from table_X lon 
inner join table_X bur
    on lon.No = bur.NO
where lon.location='London' AND bur.location='Burges';

如果您實際上使用的是Oracle,則可以使用merge語句(該語句也應與MSSQL一起使用,語法稍有不同):

MERGE INTO table1
USING (
  SELECT  
  t2.no t2_no,
  t2.score t2_score,
  t2.available t2_available,
  t2.price t2_price,
  t2.some_more_text t2_some_more_text
  FROM table1 t1
  JOIN table1 t2 ON t1.no = t2.no
  WHERE t1.Location='London' AND t2.Location='Burges'
) ON (no = t2_no)
WHEN MATCHED THEN UPDATE
SET score = t2_score, 
    available = t2_available,
    price = t2_price,
    some_more_text = t2_some_more_text;

參見示例SQL Fiddle

合並的參考文檔 (Oracle 11g)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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