所以我看起來的表中調用虛像如何在SQL表與該列從另一個特定行的同一表中的值更新每一行的一列
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 4 | 3 | u2
1 | 2 | 4 | 3 | u3
我已經決定每行需要有相同的C
列WHERE E = u1
。因此,我將結束:
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 3 | 3 | u2
1 | 2 | 3 | 3 | u3
要做到這一點,我跑下面的查詢:
update tb1
set tb1.C = tb2.C
from dummy as tb1, dummy as tb2
where tb2.E = 'u1'
我只是好奇,如果這是做在SQL Server這樣的事情的最好方法。
你可以使用的JOIN,但是這一個簡單的查詢它並不需要優化。 – Mihai
我們希望引擎足夠聰明,在執行連接之前限制tb2的結果,這可能會導致大的笛卡爾積。如果不是,那麼進行內連接並將E的限制放在連接上可能會更有效。但測試將不得不做的知道。這實際上取決於數據庫版本補丁,以便引擎如何處理這個問題。很好的問題,但。我想過一個子選擇,但是爲每一行做這件事可能會導致性能下降。再次,只有知道的方法是測試。嘗試所有3種方法並查看執行計劃! – xQbert
另一個項目要知道,如果C對於E的相同值具有不同的值,那麼您的查詢將不起作用。因爲tb2會返回多個值。到目前爲止發佈的三個答案都爲您提供了C的價值,這可能不是您想要的。如果你知道你只有1的價值E是U1那麼它是一個非問題。然而,如果你有多個你的解決方案會失敗,並且發佈的三個答案要麼提供C的最大值,要麼C的隨機值爲。 – xQbert