Oracle "Beginnt Mit", text, beitreten, ohne null-Werte
Ich bin mit einigen Schwierigkeiten. Ich bin versucht, zu erstellen eine SQL-Abfrage mit "beginnt mit" - Logik. Ein wenig hintergrund zuerst...
In der Datenbank, ich habe die Aufgabe, Berichte zu schreiben, gibt es eine "user" Tabelle und ein "Verkäufer" - Tabelle, mit Geschäftsleuten Zugehörigkeit zu einem Benutzer. In einer nicht-so-genialer Schachzug, der designer der Datenbank entschieden zu verknüpfen, die Verkäufer durch die substring-match, um Ihre Mitarbeiter-code. Zum Beispiel:
John Smith "employee_code" wäre "JS". Aber er hat mehrere "Geschäftsleute" zu unterscheiden sein Verkauf verschiedene Arten. So könnte er das "JS1", "JS2", "JS3", usw., als seine "salesperson_code".
Zur Veranschaulichung:
user table:
|---------- | ----------- | ---------- | ---------------|
| username | firstname | lastname | employee_code |
|---------- | ----------- | ---------- | ---------------|
| JSMITH | John | Smith | JS |
|---------- | ----------- | ---------- | ---------------|
salesperson table:
|------------------ | ------------------|
| salesperson_name | salesperson_code |
|------------------ | ------------------|
| John Smith 1 | JS1 |
| John Smith 2 | JS2 |
| John Smith 3 | JS3 |
|------------------ | ------------------|
Es gibt keine Fremdschlüssel in der salesperson-Tabelle zu verknüpfen, um die user-Tabelle, wird nur der Teilstring von den Mitarbeiter-code.
Kann ich mich nicht erinnern, wo ich fand diese Antwort, aber auf meine Anfragen habe ich bisher getan:
select user.name
from user user
inner join salesperson spn on spn.salesperson_code like user.employee_code || '%'
Diese Logik erfolgreich ist das "beginnt mit" - match. Allerdings gibt es Benutzer mit leeren Mitarbeiter-codes und Sie auch mit dieser Abfrage.
Was ich Suche: wie kann ich diese Abfrage ändern, so dass, wenn der employee_code leer ist wird es nicht passen? Ich bin ziemlich Neuling mit Oracle-Abfragen. Andere DBMS' haben, beginnt mit der Klausel, die nicht entsprechen, werden leere Felder.
Vielen Dank im Voraus für Eure Hilfe!
- ...
AND user.employee_code IS NOT NULL
? - Ändern Sie die Datenbank.
- Wenn das eine option, Bill, würde ich nicht geschrieben haben, ist die Frage. :/
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
LIKE USER.EMPLOYEE_CODE || '%' AND USER.EMPLOYEE_CODE NOT NULL
. YMMV. Teilen und genießen.versuchen
select user.name from user user inner join salesperson spn on spn.salesperson_code like DECODE (user.employee_code, '', NULL, user.employee_code || '%')
''
in einer Oracle-Spalte wird hilfreich bestätigen Sie die Eingabe aber speichernNULL
statt....AND USER.EMPLOYEE_CODE IS NOT NULL
ist klar und einfach zu verstehen. Teilen und genießen.Ich würde vorschlagen, mit einem regulären Ausdruck zum extrahieren der non-stellige Teile der salesperson-code und Optional die Ziffern Teil. Erstellen Sie eine Ansicht für die Tabelle mit diesen zusätzlichen Feldern oder verwenden Sie es als table-Ausdruck in der Abfrage.
Hinweis: die regulären Ausdrücke entsprechen eine oder mehrere nicht-Ziffern und einer oder mehrerer Ziffern jeweils.
Hinzufügen eines
IS NOT NULL
Zustand: