2016-03-20 1 views
2

Ich habe diese drei Tabellen in SQL Server 2008:Schleife durch Komma getrennt in einer Tabelle aufgelistet und machen viele-zu-viele-Beziehung in einem Tag-Tabelle entsprechen

Tabelle 1 - Etwas

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

Table2 - Stichworte

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

Table3 - many-to-many-Beziehung Tabelle btw Tabelle 1 und Tabelle 2

ID table1ID table2ID 

Problem/Frage: Ich brauche einige SQL, die Schleife durch jede Tabelle 1 Zeile der durch Komma getrennte Tags Lage ist, für ein Spiel in Tabelle 2 (Tag) suchen, und die Beziehung Werte in Tabelle 3 einfügen ... wie dieses Ergebnis:

Table3 - many-to-many-Beziehung Tabelle:

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! Keine Übereinstimmung/Beziehung zwischen 'a' und 'aa', 'b' und 'bb' und so weiter. Nur "streng" passen.

Und ja - wenn ich die Werte in Tabelle3 erzeugt habe - werde ich die Tags-Spalte in Tabelle1 löschen (da es dann nicht mehr nötig ist).

Bitte helfen. Ich bin ein hoffnungsloser Neuling!

Und bitte ein Anfänger für Dummheit und Naivität foregive - ich für eine Lösung zu suchen versucht, aber es ist ein wenig kompliziert, dieses Problem in einer einfachen Suche Begriff zu übersetzen - ich eine ähnliche Frage haben

übersehen
+0

Viele Beispiele und Methoden zum Drehen komma seperatd in Tabelle liegen vor, wenn Sie ein bisschen googeln: zum Beispiel von dieser Seite http://stackoverflow.com/questions/5493510/turning-a-comma- separated-string-in-individual-rows –

+0

Danke - aber ich war da. Und ich habe die Tags (commasep.) Von Table1 in eine Table2 umgewandelt. Aber jetzt brauche ich den letzten Schritt ... die Tabelle3: Schleife durch Table1 - Suche nach Übereinstimmung in Tabelle2 - und wenn es eine Übereinstimmung gibt, dann relation-values ​​in Tabelle3 setzen – Marrix

+0

Entschuldigung, habe nicht bemerkt, dass du es schon gedreht hast. Aber führe keine Schleife in SQL aus - es funktioniert mit Datensätzen, also verbindest du einfach deine Tabellen und Ergebnisse und verwendest das, um sie in jede Tabelle einzufügen, die du brauchst/willst. Verwenden Sie allgemeine Tabellenausdrücke und temporäre Tabellen, wenn Sie nicht in der Lage sind, dies auf einmal zu tun. –

Antwort

1

versuchen Sie dies:

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

JA! Vielen Dank. Das hat das Problem gelöst. Und es ist sogar viel einfacher, als ich es zu hoffen wagte. Wie kann es so einfach sein?!? Ich suchte nach Split-Funktionen und vielen anderen komplizierteren Lösungen ... Wow. Ich bin sehr dankbar. DANKE :-) – Marrix

+0

Übrigens ... Ich habe es ein wenig angepasst. Ich habe "Identität" auf der ID. Und ich hatte Problem mit SELECT * INTO ... Nur kleine Dinge/Anpassungen: – Marrix

+0

INSERT INTO Tabelle 3 (table1ID, table2ID) ( SELECT Table1.id AS t1ID, Table2.id AS t2ID FROM Tabelle 1, Tabelle 2 WHERE ' , '+ Table1.tags +', 'LIKE'%, '+ Table2.Tag +',% ' ) Ich liebe diese Lösung wirklich. So überraschend einfach. Danke noch einmal :-) – Marrix

Verwandte Themen