2016-04-02 10 views
4

Ich habe zwei Tabellen, die aussehen wie folgt:Vergleichen Sie zufällig platzierte Informationen in einer Zeichenfolge?

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

Und wie folgt aus:

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 

Ich brauche die Rate 1 und Rate 2 für jedes Element PKey, zurückzukehren, aber wer auch immer aus Tabelle 2 Ich wusste nicht genug darüber, wie SQL-Datenbanken funktionieren, um die Tabelle nützlich zu machen (um Zeit oder etwas zu sparen).

Gibt es eine einfache Möglichkeit, die Informationen zurückzugeben? Es wird immer durch Schrägstriche von anderen PKEys in seiner Reihe geteilt, aber es kann am Anfang, willkürlich an irgendeinem Punkt in der Mitte, oder am Ende der Reihe fallen. Darüber hinaus werden einige Elemente möglicherweise nicht in einer Zeile angezeigt.

+0

Ich habe + 1ed dies vor allem, weil Sie erkennen, wie schrecklich die Struktur und enthalten diese Tatsache in Frage. Vielen Dank. Übrigens wäre der richtige Weg, dies zu strukturieren, eine Bridge-Tabelle (Viele-zu-Viele-Beziehung). – jpmc26

+0

Ja, die "Rate" Werte entsprechen nicht einmal anderen Tabellen. Dieser Tisch schwebt buchstäblich nur dort. Ich bin mir nicht sicher, warum sie es einfach nicht als Attribut an einer anderen Tabelle hinzugefügt haben. – phroureo

+0

Ich meinte eine Bridge-Tabelle zwischen einer "Raten" -Tabelle (wahrscheinlich brauchen Sie einen Ersatzschlüssel) und der Haupttabelle. Meine Annahme war, dass wenn sich die Preise ändern würden, sie sich für alle damit verbundenen Einträge ändern müssten; Eine separate Tariftabelle würde dies ermöglichen. Offensichtlich, wenn das nicht stimmt, sollten es nur Attribute auf der Originaltabelle sein. – jpmc26

Antwort

4

Also die PKey in Tabelle2 enthält eine verkettete Liste von einzelnen PKeys. Sie benötigen einen String-Operation Aufzeichnungen übereinstimmen, nämlich so etwas wie '/1AF1/1AF2/1AF3/' like '%/1AF2/%':

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

Wird dies für die Fälle sorgen, in denen es nicht mit einem "/" beginnt oder nicht mit einem "/" endet? Manchmal befinden sich die Elemente am Anfang oder am Ende der verketteten Liste. – phroureo

+2

Aus diesem Grund füge ich die Schrägstriche hier ''/'+ t2.pkey +'/''und hier' '% /' + t1.pkey + '/%'' hinzu. –

+1

Das ist die richtige Antwort. Beachten Sie, dass wenn Tabelle 2 in Bezug auf Zeilenanzahl sehr groß ist, dies eine langsame Abfrage sein wird. Wenn dies der Fall ist, ist es am besten, die Tabelle mit einer normalisierten Struktur zu überarbeiten und neu zu erstellen. Dies könnte Sie vor Ihren Benutzern bewahren, die sich über Leistungsprobleme beschweren. – Overhed