SQL Eintrag vorhanden?



  • Hallo, habe jetzt schon ein wenig rumgeschaut, aber finde nicht so recht was passendes.

    Gibt es eine SQL Abfrage, ob ein bestimmter Wert in einer Tabelle bereits vorhanden ist?
    Wenn ja wie lautet diese?



  • Naja, in welchem Zusammenhang brauchst du es? Also wie willst du das Ergebnis bekommen? Wenn du nur eine "1" oder "0" in einem Recordset brauchst, kannst du das in T-SQL z.B. einfach so schreiben:

    SELECT (CASE WHEN EXISTS([i]Abfrage[/i]) THEN 1 ELSE 0 END) as [i]column_name[/i]
    

    Konkretes Beispiel:

    -- gucken ob es den Player 'hans' gibt
    SELECT (CASE WHEN EXISTS(SELECT * FROM player WHERE name = 'hans') THEN 1 ELSE 0 END) as player_exists
    

    Das liefert dir 0 wenn die Abfrage SELECT * FROM player WHERE name = 'hans' "ein leeres Ergebnis" hat, bzw. eben 1 wenn das Ergebnis nicht leer ist.

    Soweit ich weiss ist das Standard SQL (SQL-92), müsste also auch mit anderen SQL-Dialekten funktionieren.

    Wenn du es direkt in einem SQL Script brauchst, kannst du oft auch einfach schreiben

    IF EXISTS(...) BEGIN
        (...)
    END ELSE BEGIN
        (...)
    END
    

    Natürlich lässt sich EXISTS auch an anderen Stellen verwenden:

    -- alle Player die einen Score haben ermitteln
    SELECT * FROM player WHERE EXISTS(SELECT * FROM score WHERE score.player_nr = player.player_nr)
    


  • Reicht nicht auch einfach

    SELECT EXISTS(Abfrage)
    

    ?



  • D-eath schrieb:

    Reicht nicht auch einfach

    SELECT EXISTS(Abfrage)
    

    ?

    Nein. Zumindest in T-SQL geht es nicht. EXISTS ist eben keine Funktion, und kann nur an bestimmten Stellen auftreten (nach WHERE, IF, ...).

    Man kann es aber verkürzen, wenn es einen nicht stört dass man dann statt den Wert eines Feldes zu holen, abfragen muss, ob das Resultat leer ist oder nicht:

    SELECT 1 WHERE EXISTS(Abfrage)
    

    BTW: man kann in SQL typischerweise auch nicht "WHILE TRUE ..." schreiben, man muss sowas wie "WHILE 1=1 ..." stattdessen verwenden.



  • Super, danke!

    Hat mir geholfen. Wieder was gelernt. 🙂

    👍


Anmelden zum Antworten