2016-04-02 14 views
4

Ben aşağıdaki gibi görünecektir iki tablo var:Rastgele yerleştirilen bilgileri dizeyle karşılaştırın?

PKey Description Group 
1AF2 Item 1   101 
2B2E4 Item 2   102 
3G54A1 Item 3   101 
4TR7 Item 4   103 

Ve böyle:

PKey      Rate 1 Rate 2 
1AF1/1AF2/1AF3   .075  .0089 
2B2E1/2B3E3/2B1E4/2B7E5 .068  .049 
3G54A1/3H52A4/3G14B2  .025  .0099 
4TR3/4TR7/4TR8   .045  .0012 

ben her öğe PKey için Hızı 1 ve Hızı 2 dönmek gerekir, ama kim tablo 2 yaptı SQL veritabanlarının gerçekte tabloyu nasıl kullanışlı hale getirdiğini (zamandan veya bir şeyden tasarruf etmeye çalışmak) nasıl çalıştığını yeterince bilmiyordum.

Bilgileri döndürmenin kolay bir yolu var mı? Her zaman diğer PKey'in kendi satırındaki eğik çizgilerle bölünecek, fakat başlangıçta, ortasındaki ya da sıranın sonundaki bir noktada keyfi olarak düşebilir. Ayrıca, bazı öğeler art arda görünmeyebilir.

+0

Ben ettik +1 yaptı bu yapı ne kadar korkunç tanımak ve sorunuzu gerçeğini dahil büyük nedeni. Teşekkür ederim. Bu arada, bunu yapmanın doğru yolu bir köprü masasıyla (çoktan çoğa ilişki) olacaktır. – jpmc26

+0

Evet, "Rate" değerleri başka tablolara bile uymuyor. Bu tablo, kelimenin tam anlamıyla orada tek başına yüzüyor. Neden başka bir tabloya neden eklemediklerini anlamadım. – phroureo

+0

"Oranlar" tablosu (muhtemelen bir anahtar anahtarına) ve ana tablo arasındaki köprü tablosunu kastettim. Benim varsayımım, oranlar değiştiyse, tüm ilgili girdiler için değişmesi gerektiğiydi; ayrı oran tabloları olması buna izin verecektir. Açıkçası, eğer bu doğru değilse, o zaman sadece orijinal tablodaki özellikler olmalıdır. – jpmc26

cevap

4

Dolayısıyla, tablo 2'deki PKey, tekli PKey'lerin birleştirilmiş listesini içerir. Sen kayıtları, '/1AF1/1AF2/1AF3/' like '%/1AF2/%' gibi yani bir şey eşleştirmek için bir dize işlemi gerekir:

select * 
from t1 
join t2 on '/' + t2.pkey + '/' like '%/' + t1.pkey + '/%'; 
+0

Bu, ''/''ile başlamadığı veya' '/'' ile bitmediği durumlara dikkat edecek mi? Bazen öğeler, birleştirilmiş listenin başında veya sonundadır. – phroureo

+2

Bu yüzden burada '/' + t2.pkey + '/' 've burada ''%/'+ t1.pkey +' /% '' harflerini ekliyorum. –

+1

Doğru cevap budur. Tablo 2 satır sayısı açısından büyük ise, bu yavaş bir sorgu olacağına dikkat edin. Bu durumda, en iyi sonuç, tabloyu normalize edilmiş bir yapıyla yeniden düzenlemek ve yeniden oluşturmaktır. Bu, sizi performans sorunlarından şikayet eden kullanıcılarınızdan kurtarabilir. – Overhed