Vinzenz Mai: Abfrage in ANSI SQL umschreiben

Beitrag lesen

Hallo Markus,

Er meint, mit einem „in“ würde es leichter gehen. Aber da erhalte ich auch nur Fehlermeldungen und keine Ergebnisse.

Wie bereits geschrieben, Deine Versuche zeugen von Verzweiflung - sie sind für jemand, der etwas Erfahrung hat, offensichtlich falsch und brauchen nicht näher diskutiert zu werden.

IN vergleicht einen Wert mit einer Wertliste oder der Wertemenge einer einspaltigen Unterabfrage.

In der Unterabfrage die gleiche OR-Verknüpfung zu machen, vereinfacht die Lösung nicht. Bleibt also die Wertliste. Du kannst dort keine Wildcards verwenden, wie Du in Deinem ersten Versuch bereits gemerkt hast.

Somit bleibt übrig, eine Operation auf Deine Suchspalte anzuwenden, die Dir den ersten Buchstaben zurückliefert. Beispiele dafür wären ein CAST oder eine Funktion, die Dir eine Teilzeichenkette zurückliefert. Bei beidem weiß ich nicht, wie es mit der ANSI-SQL-Kompatibilität aussieht.

T-SQL (MS SQL-Server) unterstützt beispielsweise folgendes:

  
SELECT  
    last_name  
FROM  
    employees  
WHERE  
    -- Prokrustes: Passe den Wert der Spalte last_name in ein einziges Zeichen ein.  
    -- Alles, was über das Bett (das einzige Zeichen) hinausragt, wird abgeschnitten.  
    CAST(last_name AS VARCHAR(1)) IN ('J', 'K', 'L', 'M')  

oder

  
SELECT  
    last_name  
FROM  
    employees  
WHERE  
    -- Verwende die Funktion SUBSTRING (keine Ahnung, ob die in Oracle genauso  
    -- heißt und die gleichen Parameter entegennimmt), um das erste Zeichen zu  
    -- bekommen, das in last_name steht.  
    SUBSTRING(last_name, 1, 1) IN ('J', 'K', 'L', 'M')  

Wie bereits erwähnt: Keine Garantie für ANSI-SQL-Kompatibilität oder Portierbarkeit.

Zuguterletzt gäbe es auch noch die Möglichkeit des Vergleiches mit größer gleich J und echt kleiner N (wobei Groß-/Kleinschreibung ggf. berücksichtigt) werden muss.

Freundliche Grüße

Vinzenz