Können Sie mir bitte sagen, ob es eine alternative Funktion gibt, die ich für REGEXP_LIKE verwenden kann?Alternative zu REGEXP_LIKE in Orakel
Ich habe folgende Situation:
Names:
ID NAME
1 Alex
2 Jim
3 Tom
Invoices:
ID Amount Name_IDs
1 100 1;2;
2 200 2;3;
Wanted output:
Invoice_ID Names Amount:
1 Alex;Jim; 100
2 Jim;Tom; 200
Ich weiß, dass das Datenbankmodell nicht ganz technisch richtig ist, aber jetzt eine Abfrage für diesen mit REGEXP_LIKE Ich verwende in einem listagg() die Namen hinzufügen , aber die Leistung ist sehr, sehr langsam.
SELECT inv.id as invoice_id,
SELECT listagg(n.name,';') WITHIN GROUP (ORDER BY NULL) from names where REGEXP_LIKE(inv.names, '(^|\W)' || n.name || '(\W|$) 'as names
inv.amount as amount
from invoices inv;
Können Sie mir bitte eine Idee geben, wie Sie diese Abfrage verbessern können?
Vielen Dank!
Wenn Sie Leistung wollen, speichern Sie die Daten auf SQLish Weise - eine 'InvoiceNames' Tabelle mit einer Zeile pro Rechnung und pro Name. –
Und selbst wenn ich das tun kann, wie kann ich alle Namen in einer Spalte speichern? – codi05ro