Vinzenz Mai: Abfrage in ANSI SQL umschreiben

Beitrag lesen

Hallo

Kann mir vielleicht jemand bei folgendem Beispiel weiterhelfen.

Ich soll alle Angestellten anzeigen deren Nachname mit „J“, „K“, „L“ oder  „M“ beginnt.

Ich habe die Aufgabe schon gelöst, aber ich habe sie nicht in ANSI SQL Geschrieben.

Habt Ihr einen Auszug, Übersicht oder was auch immer über den zu verwendenden ANSI-SQL-Standard (es gibt übrigens verschiende, je nach Jahr des Standards) bekommen? Die SQL-Spezifikation kostet, soweit ich gehört habe, Geld, richtig Geld. Keiner meiner bisherigen Arbeitgeber hat es für nötig erachtet, dieses zu investieren - auch wenn das Hauptprodukt eine SQL-basierte Anwendung war.

Aber:

  

> SELECT                    -- Schlüsselwort SELECT gehört zu jedem ANSI-SQL-Standard  

      last_name             -- Spaltenname korrekt nach ANSI  

> FROM                      -- Schlüsselwort FROM korrekt nach ANSI  

      employees  

> WHERE                     -- Schlüsselwort WHERE korrekt nach ANSI  

      last_name LIKE 'J%'   -- Spaltenname in Ordnung  
                            -- Operator LIKE korrekt nach ANSI  
                            -- Wildcard-Zeichen % sollte auch ANSI entsprechen  

> OR                        -- Operator OR sollte auch korrekt sein  

      last_name LIKE 'K%'  

> OR  

      last_name LIKE 'L%'  

> OR  

      last_name LIKE 'M%'  

Was zum Geier soll hier der ANSI-SQL-Spezifikation nicht entsprechen? Frag' das Deinen Dozenten, Betreuer. Ich bin der gleichen Ansicht wie Ilja: es entspricht der Spezifikation.

Vielleicht soll statt OR ein anderer Operator verwendet werden, MySQL unterstützt beispielsweise auch || als logisches ODER (ist || nicht in Oracle der Verknüpfungsoperator für Zeichenketten?). T-SQL hingegen nur OR und T-SQL brüstet sich durchaus damit, irgendwelche älteren ANSI-SQL-Standards zu erfüllen :-)

Alle weiteren Versuche von Dir zeugen eher von Verzweiflung und naivem Umgang mit dem IN-Operator. Sie sind bereits auf den ersten Blick völlig falsch.

Eine Idee hätte ich noch:
Ersetze den OR-Operator in Deiner WHERE-Klausel durch eine UNION-Operation für vier getrennte Abfragen, die jeweils die Daten mit einem Anfangsbuchstaben zurückliefern. Wenn Deine Ausbilder das haben wollten, dann gehörten sie gesteinigt.

Freundliche Grüße

Vinzenz