SELECT mit fallback/catchall

Hallo,

in der Datenbank meines Sportwagenmanagers habe ich eine Tabelle mit Autos und den zugehoerigen Fahrern (ja, ich aendere das layout oefter mal):

mysql\> SELECT car,driver FROM car\_and\_drivers WHERE 1;
+----------+---------+
| car | driver |
+----------+---------+
| Ferrari | Fred |
| Porsche | Frank |
| Polo | \* |
+----------+---------+
10 rows in set (0.00 sec)

mysql\>

Mit Abwandlungen der Art WHERE driver = „Fred“ suche ich dann das Auto zum jeweiligen Fahrer. Logischerweise kommt bei WHERE driver = „John“ kein Ergebnis. Gibt es eine Moeglichkeit, die Abfrage so zu formulieren, dass bei einem unbekannten driver das Auto aus der Zeile zurueckgegeben wird, wo bei driver das * steht? Und zwar nur bei diesen. Leider kann ich nur einmal abfragen, zweimal abfragen und dazwischen das Ergebnis pruefen geht nicht.

Vielen Dank im Voraus,
Gruss vom Frank.

Hallo,

versuch das mal:

SELECT *
FROM deine_Tabelle T
WHERE DRIVER = ‚BILL‘
UNION ALL
SELECT *
FROM deine_Tabelle T
WHERE DRIVER = ‚*‘
ORDER BY DRIVER DESC
FETCH FIRST ROW ONLY

Gruß

Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

na, das hat man jetzt davon, wenn man seine Frage nicht vernuenftig formuliert.

SELECT *
FROM deine_Tabelle T
WHERE DRIVER = ‚BILL‘
UNION ALL
SELECT *
FROM deine_Tabelle T
WHERE DRIVER = ‚*‘
ORDER BY DRIVER DESC
FETCH FIRST ROW ONLY

  1. Ich bin ja arm und muss mit OpenSource-Frickelkram arbeiten und FETCH FIRST ROW ONLY kann mein MySQL nicht. Ich mutmasse aber mal, dass es sowas wie LIMIT 1 tut.

  2. Kann vergass ich zu erwaehnen, dass die Tabelle durchaus auch so aussehen kann:

    ±-------------±--------+
    | car | driver |
    ±-------------±--------+
    | Ferrari | Fred |
    | Porsche | Frank |
    | Lamborghini | Fred |
    | Polo | * |
    ±-------------±--------+

Es kann also mehrere Autos fuer einen Fahrer geben und bei einer Anfrage WHERE driver = „Fred“ haette ich schon ganz gerne alle Autos von Fred. Fuer * wird es wohl nur ein Auto geben, eine Anfrage, die mit mehreren * in der driver Spalte alle Autos als fallback zurueckgibt, waere aber natuerlich noch mehr super.

Nochmals Danke,
Gruss vom Frank.

Na, dann versuch doch mal

SELECT *
FROM deine_Tabelle
WHERE DRIVER = ‚FRED‘
and exists (select driver
from deine_Tabelle)
UNION all
SELECT *
FROM deine_Tabelle
WHERE DRIVER = ‚*‘
and not exists (select driver
from deine_Tabelle
where driver = ‚FRED‘)
ORDER BY DRIVER DESC

Gruß Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Noch was, habe ich vorhin übersehen:

Beim 1. Select braucht man das ‚and exists …‘ nicht, da hatte sich der Fehlerteufel (sprich: Kopierteufel) eingeschlichen.

Thomas