Temel sorum, sorgumda belirtilen değerlerden aynı anda birden fazla sütunu güncellemeyle ilgili. Bunu yapmak istediğim şey, değerlerimi ginormous tablosundan güncellememdir, bu yüzden sadece çalışma süresini azaltmak için bir kez sorgulamak istiyorum.TSQL - Güncelleştirmelerde Birden Çok Sütun Üzerinde Yapılan Açıklamalar
Ben muktedir olmak istiyorum Aynı anda birden fazla sütun güncellemek içinselect a.Value
from Table1
left outer join
(
select ID, FilterCol1, FilterCol2, Value
from Table2
) a on a.ID = Table1.ID
where {Condition1a on FilterCol1}
and {Condition2a on FilterCol2}
böyle bir şey yapmak: İşte sütunlardan sadece biri için istediğiniz değeri döndüren bir örnek select ifadesi örneğidir ben güncellemeniz gerekir Bu (ama NULL döndürür):
Update T1
set T1Value1 = (select a.Value where {Condition1a on FilterCol1}
and {Condition2a on FilterCol2)
,T1Value2 = (select a.Value where {Condition1b on FilterCol1}
and {Condition2b on FilterCol2})
from Table1 T1
left outer join
(
select ID, FilterCol1, FilterCol2, Value
from Table2
) a on a.ID = Table1.ID
büyük takdir bu out endam herhangi bir yardım, herhangi bir sorunuz varsa bana bildirin yoksa herhangi bir hata yaptıysam. Teşekkürler!
DÜZENLEME: Sanırım sorunu tespit ettim, ama henüz bir çözümden emin değilim. Bence bu konunun biraz daha fazla bağlam gerektirdiğini düşünüyorum: Tablo 2'deki seçim aslında geniş bir tablonun üzerinde yer almıyor. Bu, left outer join
uygulandığında, belirli bir kimlik için birden fazla satırın olacağı anlamına gelir. Earl'in önerdiği durum ifadesi ne yapıyor gibi görünüyor (ve bunun nerede olduğuyla birlikte olduğunu tahmin ediyorum) Koşullarımı sadece ilk sütunlara a. Koşullarım, a
arasındaki satırların hangisinin seçileceğini belirlemeye yardımcı olduğundan, her zaman ilk satır için yanlışları değerlendireceklerdir (bunu veri hakkında bildiğimden biliyorum), dolayısıyla kalıcı NULL
değerleri. a
'daki diğer satırlara bakmak için bir geçici çözüm bilen var mı?
Cevabınız için teşekkürler Earl, maalesef bu benim için çalışmadı (yine de null). Bunun gerçekten de “T1ValueX” içine hangi değerlerin koyulduğunu filtreleyecek mi yoksa “Tablo1” in hangi satırlarının güncellendiğini filtreleyecek mi diye merak ediyorum. FilterCol (1,2) 'nin Table2''den sütunlar değil, Condition (1,2) (a, b, ...)' 'Table1''de değerlere bakması fark yaratır mı? –
Tabloları ve örnek verileri ekleyebilir misiniz? – EarlOfEnnui
WHERE maddesi, güncellenen satırları filtreleyecektir. CASE değeri seçerdi. Tabloları değerlerin hangi tablodan geldiğini doğru bir şekilde bağlamış olmanız fark etmez. Tabloları birleştirmek, belki de yeni ve sql için yeni insanlar için en kolay yanlış anlaşılmış yönlerdir. Gelecekte sorularınız varsa, bir tablo (lar) ve test verisi oluşturmayı öneririm. – EarlOfEnnui