paul: select "alle ausser"

hallo,

wie krieg ich das hin:

ich möchte einen datensatz auswählen, wenn in einer spalte ein bestimmter wert vorkommt und alle anderen spalten leer sind, also z.N.

SELECT * from tabelle WHERE id=97 AND "alle anderen spalten leer"

??

  1. Hi!

    ich möchte einen datensatz auswählen, wenn in einer spalte ein bestimmter wert vorkommt und alle anderen spalten leer sind, also z.N.

    Üblicherweise gibt es keine Zusammenfassung beim Ansprechen von Spalten in der WHERE-Klausel. Du musst da alle einzeln testen. Allerdings kann je nachdem, was du als leer bezeichnest, eine Funktion von Nutzen sein, beispielsweise CONCAT() oder COALESCE().

    Lo!

    1. Üblicherweise gibt es keine Zusammenfassung beim Ansprechen von Spalten in der WHERE-Klausel. Du musst da alle einzeln testen. Allerdings kann je nachdem, was du als leer bezeichnest, eine Funktion von Nutzen sein, beispielsweise CONCAT() oder COALESCE().

      danke, das ist wohl die beste lösung. ich dachte, es gibt vielleicht eine zusammenfassung der spalten, von der ich noch nichts gehört hab...

      an all die "zweifler": der sinn meiner abfrage ist folgender:

      ich möchte eine liste von db-"leichen" erstellen, in der eben durch usereingaben nurmehr die (unveränderliche) id drinnensteht. solche datensätze werden dann in meinem kontext üblicherweise nicht mehr gebraucht, und sollen dem user zum löschen angeboten werden. ist das so falsch???

      p

      1. Moin!

        SELECT * from tabelle WHERE id=97 AND "alle anderen spalten leer"

        ich möchte eine liste von db-"leichen" erstellen, in der eben durch usereingaben nurmehr die (unveränderliche) id drinnensteht. solche datensätze werden dann in meinem kontext üblicherweise nicht mehr gebraucht, und sollen dem user zum löschen angeboten werden. ist das so falsch???

        Dieses Ziel erreichst Du aber nicht wenn Du von Anfang an auf eine ID 97 eingrenzt.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

      2. Hi,

        ich möchte eine liste von db-"leichen" erstellen, in der eben durch usereingaben nurmehr die (unveränderliche) id drinnensteht. solche datensätze werden dann in meinem kontext üblicherweise nicht mehr gebraucht, und sollen dem user zum löschen angeboten werden. ist das so falsch???

        nein, aber es bestätigt meine Vermutung, dass das DB-Layout defekt ist: Solche Einträge hätte das DBMS beim Versuch, sie zu erzeugen, ablehnen müssen, was mit entsprechenden Constraints kein Problem sein sollte. Du solltest das Layout also unmittelbar nach Deinen Aufräumarbeiten (bzw. sofern möglich schon vorher oder währenddessen) korrigieren.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. moin,

          nein, aber es bestätigt meine Vermutung, dass das DB-Layout defekt ist: Solche Einträge hätte das DBMS beim Versuch, sie zu erzeugen, ablehnen müssen, was mit entsprechenden Constraints kein Problem sein sollte.

          interessant, wie schnell immer wieder mit gewissheit auf ein falsches datendesign geschlossen wird, ohne die jeweilige umgebung zu kennen. aber erhelle uns doch, welche constraints meinst du ?

          Ilja

          1. Moin!

            aber erhelle uns doch, welche constraints meinst du ?

            "not null" wäre möglich. Auch wenn dieses nicht unter constraints gelistet ist, dem Sprachbegriff nach ist es das.

            Andererseits würde ich das (aus Gründen der Bequemlichkeit und also dann wenn es nicht wichtige Gründe gibt in der Datenbank einen _weiteren_ Sicherheitsriegel vorzuschieben) in der Anwendung machen. Da lässt sich einfacher "reagieren".

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix

            1. moin,

              aber erhelle uns doch, welche constraints meinst du ?

              "not null" wäre möglich. Auch wenn dieses nicht unter constraints gelistet ist, dem Sprachbegriff nach ist es das.

              NOT NULL ist ein constraint, der mir sehr wohl bestens bekannt ist. aber noch mal die frage, wie soll das gehen ? ohne jegliche informationen über die umgebung kann ich solche schlüße nicht ziehen. nur weil innerhalb eines datensatzes alle felder NULL sind. das bedeutet aber nicht, dass auch die jeweilige spalte innerhalb aller datensätze nicht NULL sein darf, sprich die auspärung eines oder mehrerer datensätze gibt nicht zwangsläufig aufschluss über NOT NULL constraints.

              was gehen würde wäre ein check constraint über alle attribute und dann prüft, ob alle zusammen NULL sind. das halte ich aber für nicht praxisnah.

              Ilja

  2. Moin!

    SELECT * from tabelle WHERE id=97 AND "alle anderen spalten leer"

    Neben dem was dedlfix schon richtig ausführte: Wenn Dein Datensatz eine ID hat, dann sollte diese eineindeutig sein, so dass es nur einen mit der ID 97 geben kann. Hierdurch werden dann weitere WHERE-Klauseln in der Suche obsolet. Andernfalls verwendest Du ein verwirrendes, sehr wahrscheinlich grundfalsches Design.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. moin,

      Wenn Dein Datensatz eine ID hat, dann sollte diese eineindeutig sein, so dass es nur einen mit der ID 97 geben kann. Hierdurch werden dann weitere WHERE-Klauseln in der Suche obsolet. Andernfalls verwendest Du ein verwirrendes, sehr wahrscheinlich grundfalsches Design.

      was hat die eindeutigkeit eines schlüsselattributes damit zu tun, ob ich zu meiner auswahl noch andere kritereien hinzufüge ? ich kann ja wohl auch sagen, wenn datensatz mit der id = 10 in der spalte 3 den wert grün hat, dann liefer ihn mir zurück, ansonsten nicht.

      Ilja

  3. Hi,

    ich möchte einen datensatz auswählen, wenn in einer spalte ein bestimmter wert vorkommt und alle anderen spalten leer sind, also z.N.

    das klingt danach, als hätten anderen Spalten entweder die selbe oder aber eine ähnliche Bedeutung. Bist Du sicher(!), dass Dein DB-Layout nicht defekt ist?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes