2016-03-20 9 views
2

Ben SQL Server 2008'de bu 3 tablo vardır:döngü birçok çoğa-ilişki bir etiket-tabloda eşleşecek şekilde yapmak

Tablo1 - şey

ID Title Tags 
--------------------------- 
1  Test1 a, aa, b 
2  Test2 a, b 
3  Test3 b, bb 

Tablo2 - Etiketler

ID Tag 
---------- 
1  a 
2  b 
3  aa 
4  bb 

Tablo3 - birçok çoğa ilişki Tablo btw Table1 ve Table2

ID table1ID table2ID 

Sorun/soru: Ben Table2 (Etiket) 'de bir maç için arama ve Tablo3 ... içine ilişki değerleri eklemek, her Tablo1 satırın virgülle ayrılmış etiketleri üzerinden döngü yapabiliyor bazı SQL gerekiyor gibi Bu sonucu:

Tablo3 - birçok çoğa ilişki tablosu:

ID t1ID t2ID 
----------------- 
1  1  1 
2  1  3 
3  1  2 
4  2  1 
5  2  2 
6  3  2 
7  3  4 

NB! 'A' ve 'aa', 'b' ve 'bb' ve benzeri arasında hiçbir eşleşme/ilişki yok. Sadece 'katı' eşleşme.

Ve evet - Tablo3'teki değerleri oluşturduğumda - Tablo1'deki Etiketler sütunu silinecek (artık gerekli olmadığından).

Lütfen

Yardım edin. Umutsuz bir acemiim!

Ve aptallık ve saflık için acemi foregive lütfen - Bir çözüm aramak için çalıştık, ancak basit bir arama terimi içine bu sorunu çevirmek için biraz karmaşık - Ben de benzer bir soruyu

+0

Birçok örnekler ve yöntem: örneğin bu sitede http://stackoverflow.com/questions/5493510/turning-a-comma- dan Ayrılmış-string-in-individual-satırları –

+0

Teşekkürler - ama ben orada oldum. Ve ben etiketleri (commasep.) Tablo 1'den Table2'ye dönüştürdüm. Ama şimdi son adıma ihtiyacım var ... Tablo3: Tablo1'den döngü - Tablo2'de eşleşme aranıyor - ve eğer bir eşleşme varsa o zaman ilişki değerlerini Tablo 3'e getirin. – Marrix

+0

Üzgünüm, zaten çevirmiş olduğunuzu farketmediniz. Ancak SQL'de döngü yapmayın - veri kümeleri üzerinde çalışır, böylece tablolarınıza ve sonuçlarınıza katılır ve ihtiyacınız olan/istediğiniz tabloya eklemek için kullanabilirsiniz. Tek seferde yapacak kadar rahat değilseniz, Ortak tablo ifadelerini ve geçici tabloları kullanın. –

cevap

1

kaçmış olabilir Bu deneyin: Eğer biraz google Varlığından eğer tabloya virgülle seperatd dönüm için

Select * into Table3 from (
select ROW_NUMBER() over (ORDER BY Something.id, Tags.id) as id 
, Something.id as t1ID 
, Tags.id as t2ID 
from Something, tags 
where ', ' + Something.tags + ',' like '%, ' + tags.Tag + ',%') 
+0

EVET! Teşekkür ederim. Bu problemi çözdü. Ve umut için cesaret ettiğimden çok daha basit. Bu kadar kolay nasıl olabilir? Bölünmüş işlevler ve daha birçok karmaşık çözüm aradım ... Vay. Ben çok minnettarım. TEŞEKKÜR EDERİM :-) – Marrix

+0

Bu arada ... Biraz ayarlamıştım. Kimlikler üzerinde 'kimlik' var. Ve ben ... SEÇİN * INTO Sadece küçük şeyler/ayarlamalar sorunu vardı: – Marrix

+0

INSERT INTO Tablo 3 (table1ID, table2ID) t1ID OLARAK ( SEÇ Table1.id, Table2.id Table1 DAN t2ID , Table2 OLARAK NEREDE ' '+ Table1.tags +', 'LIKE'%, '+ Table2.Tag +',% ' ) Bu çözümü gerçekten çok seviyorum. Bu yüzden şaşırtıcı derecede basit. Tekrar teşekkürler :-) – Marrix