2017-06-09 5 views
-1

i wieSQL-Tabelle mit einer select-Anweisung beitreten

mit Codes eine Tabelle
0100 ABC 
0100 ASD 
9010 ABC 
5555 ABC 

ich will select-Anweisung erstellen, die mir zwei Spalten wie

calumn A (all the codes starting with 0100), column B (all the codes that after the first 4 chars, have the same ending with column A) 

Beispiel bringen

0100 ABC, 9010 ABC 
0100 ABC, 5555 ABC 
0100 ASD, null 

ich dachte wie

select mtr.code, mtr1.code 
from material mtr 
where mtr.code like (%+ 

select distinct substring(mtr.code,5, len(mtr.code)) code 
from material mtr1 

) 

aber natürlich funktioniert es nicht. Irgendwelche Ideen?

+0

Ist 0100 ein Wert einer einzelnen Spalte oder 0100 ABC ist der Wert der Spalte? Könnten Sie bitte das Tischdesign teilen? –

+0

LIKE Unterabfrage kann nicht mehr als 1 Wert zurückgeben, sieht aus wie es mehr zurückgeben kann, wie Sie DISTINCT verwenden – PawelCz

+0

Tabellenmaterial hat nur eine Spalte Zeichenfolge, also 0100 ABC und alles andere ist ein einzelner Wert in dieser Tabelle – SDAGLAS

Antwort

1

Ich glaube, du bist für so etwas suchen:

select m1.code, m2.code 
from material m1 
left outer join material m2 
    on substring(m1.code from 5) = substring(m2.code from 5) 
    and m1.id <> m2.id 
where m1.code like '0100%' 

Wir haben eine left outer join verwenden, um alle Zeilen aus material zu bekommen, auch diejenigen, die keine Zwillinge haben. Unsere Join-Bedingung lautet, dass die beiden Werte code nach den ersten 4 Zeichen identisch sein müssen. Der Code geht auch davon aus, dass es eine id Spalte gibt; Es wird verwendet, um eine Reihe mit sich selbst zu vermeiden.

Auf der anderen Seite, wenn code ist Ihr Primärschlüssel, dann m1.code <> m2.code sollte stattdessen verwendet werden.

+0

funktioniert wie ein Charme .. danke – SDAGLAS