Veröffentlicht 5. Mai 200817 j Ich habe 2 Tabellen die ich joinen möchte. Nur mein ergebnis is net so wies sein soll. Tabelle1 ID______eintrag 1_______1 2_______7 3_______1 Tabelle2 ID______komb 1_______567 2_______2345 3_______127 4_______36 5_______123 So jetzt soll er mir die Einträge aus Tabelle2 ausgeben, wo in komb die zahl aus eintrag vorkommt, also bei der 567,der 127 und der 123 Bei meinem statement gibt er mir diese 3 ergebnisse aber 3 mal aus, also insgesamt 9 results, es sollen aber nur 3 results sein. Also wie würdet ihr das schreiben?
5. Mai 200817 j select tabelle2.komb, tabelle1.eintrag from tabelle2 right join tabelle1 on tabelle2.ID = tabelle1.ID;
5. Mai 200817 j Hmm ich seh jetzt nicht, wie ein Outer Join hier helfen könnte. Wie sieht denn Dein Statement aus? Dim
5. Mai 200817 j Autor Also ich hab grad gesehn, dass mein statement gar net stimmt, also er gibt was falsches aus, ich hab des jetzt mal mit den zahlen direkt gemacht(1 und 7) dann kommt das richtige ergebnis, also es müssten jetzt nur die zahlen mit den spalten ersetzt werden. select t2.* from tabelle2 t2 where REGEXP_LIKE(t2.komb, '[1 7]')
5. Mai 200817 j Autor select tabelle2.komb, tabelle1.eintrag from tabelle2 right join tabelle1 on tabelle2.ID = tabelle1.ID; Also die ID darf man nicht in die where bedingung nehmen, des hab ich blöd ins beispiel geschrieben, also es müsste direkt der eintrag mit der 1 und der 7 überprüft werden, im sinne von: where t1.eintrag like t2.komb
5. Mai 200817 j Also ich drücke es mal mit meinen Worten aus: Du möchtest alle Einträge aus Tabelle2 haben, die in der Spalte komb eine Ziffer aus eintrag besitzen? Ist das so richtig? Dim
5. Mai 200817 j select t2.* from tabelle2 t2 where REGEXP_LIKE(t2.komb,(SELECT eintrag from tabelle)) Irgendwie so? Bin mir nicht sicher, ob das mit der Syntax passt, aber ein Sub-select sollte helfen.
5. Mai 200817 j Also hier müssen dringendst mal Grundlagen geschaffen werden: INNER JOIN - OUTER JOIN - SQL-Tips.de Dann erledigt sich das Problem direkt von selbst. Dim
6. Mai 200817 j Autor Also ich drücke es mal mit meinen Worten aus: Du möchtest alle Einträge aus Tabelle2 haben, die in der Spalte komb eine Ziffer aus eintrag besitzen? Ist das so richtig? Dim Exakt
6. Mai 200817 j Autor Also hier müssen dringendst mal Grundlagen geschaffen werden: INNER JOIN - OUTER JOIN - SQL-Tips.de Dann erledigt sich das Problem direkt von selbst. Dim Nee net ganz, weil ich ja net über die ID joinen kann, und des problem is halt, dass des 2 numberspalten sind, wenn des varchar-felder wären, könnt ich ja ganz einfach sowas machen '%||t1.spalte1||%' Aber des geht ja mit number net. darum war halt meine frage wie ich des dann machen soll.
6. Mai 200817 j dass des 2 numberspalten sind, wenn des varchar-felder wären, Und was hindert dich daran die beiden nummerischen Felder mittels to_char in alphanumerische umzuwandeln? Dim
6. Mai 200817 j Autor Hm...aber ich kann eine number-spalte doch nicht in eine varchar-spalte umwandeln, wenn schon werte drin steht, ich müsste dann ja ne neue spalte machen und die werte aus der number-spalte rüberziehen.
6. Mai 200817 j Hm...aber ich kann eine number-spalte doch nicht in eine varchar-spalte umwandeln, wenn schon werte drin steht, Ich sagte nicht, dass Du den Spaltentyp umwandeln solltest. Ließ dir doch mal die Doku von to_char durch. Was genau machst Du eigentlich beruflich? Nur interessehalber, damit ich weiß wo ich dich einzuordnen hab. Dim
7. Mai 200817 j Autor Ich bin praktikant in ner IT-firma und beschäftig mich da halt mit Datenbanken, womit ich mich nur net allzugut auskenn^^
7. Mai 200817 j Interessant welche Datenmodelle sich so in IT-Firmen verbergen... :upps Versuchs mal damit: SELECT t2.id,t2.komb FROM t1,t2 WHERE to_char(t2.komb) LIKE '%'||t1.eintrag||'%'; Wobei oracle auch ohne to_char eine impliziete Konvertierung vornehmen würde, aber damit wird's klarer was man anstellt. Dim
7. Mai 200817 j Autor Ok, also er gibt mir schon die richtigen ergebnisse damit aus, aber eben immer noch doppelt, also mit diesem statement ob nun mit "to_char" oder ohne, kommt er auf folgende ausgabe: ID______komb 3_______127 5_______123 1_______567 3_______127 3_______127 5_______123 Warum macht er das, als ausgabe sollte das ja eigentlich so dastehn: ID______komb 1_______567 3_______127 5_______123
7. Mai 200817 j Warum macht er das, als ausgabe sollte das ja eigentlich so dastehn Das liegt daran, wie ein Join arbeitet. Für jeden Treffer den er findet gibt er einen Satz zurück. Du hast 2x die 1 und 1x die 7 in der Tabelle1. Damit wird 127 natürlich dreimal gefunden. Zweimal weil Du 2x 1 in t1 hast und nochmal wegen der 7. Das ist absolut korrekt und gilt analog für deine anderen Ergebniszeilen. Möchtest Du das es eindeutig wird, mach ein SELECT DISTINCT ... Aber wie gesagt: Das Datenmodell ist absoluter Schrott. Wer sowas entwickelt hat sollte eigentlich direkt wieder dem freien Arbeitsmarkt zugeführt werden. Dim
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.