Gustl: SQL select mehrere OR mehrere AND kapier ich nicht

Hallo, bin SQL-Anfänger, ich kapier das mit mehreren OR AND nicht und finde auch nichts darüber. Sicher ist es einfach.

Ich brauche Abfragen wie:

select * from kunden WHERE a OR b OR c OR d AND e AND f ORDER BY ...

wenn in a OR b OR c OR d ein beliebiger Wert steht AND e AND f ... ein bestimmter wert steht.

die abfrage läuft zwar bringt aber nicht die gewünschten datensätze. ich geh mal von aus dass ich das irgendwie anders klammern muss, aber das kapier ich nicht.

select * from kunden WHERE (a OR b OR c <>'') AND d='WERT' AND e='WERT' ...

so gehts auch nicht.

ich mache das in perl, also mit den platzhaltern: WHERE a <>? ... execute('');

bitte, wer kanns mir kurz erklären.

--
Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

--
G. DAVID
  1. Hi,

    Hallo, bin SQL-Anfänger, ich kapier das mit mehreren OR AND nicht und finde auch nichts darüber.

    http://de.wikipedia.org/wiki/Aussagenlogik

    Ich brauche Abfragen wie:

    select * from kunden WHERE a OR b OR c OR d AND e AND f ORDER BY ...

    wenn in a OR b OR c OR d ein beliebiger Wert steht AND e AND f ... ein bestimmter wert steht.

    Wenn in a bis d ein beliebiger Wert stehen darf - wieso willst du sie dann überhaupt in die WHERE-Klausel mit aufnehmen?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Wenn in a bis d ein beliebiger Wert stehen darf - wieso willst du sie dann überhaupt in die WHERE-Klausel mit aufnehmen?

      Nicht darf, sondern es MUSS ein beliebiger Wert drinstehen.

      MfG ChrisB

      --
      Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

      --
      G. DAVID
      1. Hallo,

        Wenn in a bis d ein beliebiger Wert stehen darf - wieso willst du sie dann überhaupt in die WHERE-Klausel mit aufnehmen?

        Nicht darf, sondern es MUSS ein beliebiger Wert drinstehen.

        trifft auf die leere Zeichenkette auch zu - im Gegensatz zu NULL.
        Natürlich musst Du - wie in nahezu allen Programmiersprachen auch - jeden Vergleich explizit aufführen. Sag' bloß, das wäre in Perl nicht so ...

        Und wenn etwas in jeder dieser Spalten stehen muss, dann ist dies eine UND-Verknüpfung, keine ODER-Verknüpfung. Perl macht das übrigens auch so, das ist normale Aussagenlogik.

        Du kannst natürlich das ganze umdrehen:

        Wenn Spalte a leer ist oder Spalte b leer ist oder Spalte c leer ist oder Spalte d leer ist, dann ist das nicht gültig.

        ... aber wozu?

        Wenn Spalte a nicht leer ist und Spalte b nicht leer ist und Spalte c nicht leer ist und Spalte d nicht leer ist und Spalte e einen bestimmten Wert hat und Spalte f einen bestimmten Wert hat, dann möchtest Du diesen Datensatz haben.

        Wie's mit NULL und Leerstring aussieht, das sollte Dir Deine Aufgabenstellung sagen.

        Freundliche Grüße

        Vinzenz

        1. Wenn Spalte a nicht leer ist und Spalte b nicht leer ist und Spalte c nicht leer ist und Spalte d nicht leer ist und Spalte e einen bestimmten Wert hat und Spalte f einen bestimmten Wert hat, dann möchtest Du diesen Datensatz haben.

          genau

          Freundliche Grüße

          Vinzenz

          hallo vinzenz, ich versuchs mal so. was stimmt an dieser abfrage nicht?

            my $sel=$dbh->prepare('SELECT * FROM kunden WHERE age=? AND blub=? AND (bild1 OR bild2 OR bild3 OR bild4 OR text OR lk1 <>?) ORDER BY hit DESC') || die $DBI::errstr;  
            $sel->execute($age,'J','') || die $DBI::errstr; my $ref=$sel->fetchall_arrayref; my @liste = map {join";",@$_} @$ref;
          

          --
          Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

          --
          G. DAVID
          1. Wenn Spalte a nicht leer ist und Spalte b nicht leer ...

            nein! du bringst mich durcheinander.

            Wenn Spalte a nicht leer ist ODER Spalte b nicht leer ODER ...

            1. das ergebnis ist ein anderes aber es stimmt trotzdem nicht wenn ich einzeln abfrage. es kommen in beiden fällen datensätze mit in denen alle OR´s nicht erfüllt sind:

                my $sel=$dbh->prepare('SELECT * FROM kunden WHERE age=? AND blub=? AND (bild1 <>? OR bild2 <>? OR bild3 <>? OR bild4 <>? OR text <>? OR lk1 <>?) ORDER BY hit DESC') || die $DBI::errstr;  
                $sel->execute($age,'J','','','','','','',) || die $DBI::errstr; my $ref=$sel->fetchall_arrayref; my @liste = map {join";",@$_} @$ref;
              

              für mich sieht die abfrage aber in beiden fällen logisch aus. alle OR felder sind strings, wobei das lt. MySql wurscht ist.

              1. Hallo,

                das ergebnis ist ein anderes aber es stimmt trotzdem nicht wenn ich einzeln abfrage. es kommen in beiden fällen datensätze mit in denen alle OR´s nicht erfüllt sind:

                [code lang=sql]  my $sel=$dbh->prepare('SELECT * FROM kunden WHERE age=? AND blub=? AND (bild1 <>? OR bild2 <>? OR bild3 <>? OR bild4 <>? OR text <>? OR lk1 <>?) ORDER BY hit DESC') || die $DBI::errstr;

                ja eben. Du willst kein ODER, Du willst UND. Sag' ich doch!
                Das ist übrigens in Perl ganz genauso.

                Du möchtest nur Datensätze, bei denen
                    age einen bestimmten Wert hat
                UND
                    blub einen bestimmten Wert hat
                UND
                    bild1 etwas enthält
                UND
                    bild2 etwas enthält
                UND
                    bild3 etwas enthält
                UND
                    bild4 etwas enthält
                UND
                    text etwas enthält
                UND
                    lkl etwas enthält

                Wo ist da ein ODER?

                Freundliche Grüße

                Vinzenz

                1. ja eben. Du willst kein ODER, Du willst UND.

                  nein vinzenz, ich will ein UND und ein ODER!

                  1. das alter ist 40 > true UND 2) blub ist JA > true

                  ok, obiges wäre jetzt erfüllt. ab dann muss EINES der anderen felder einen wert x haben. nur EINS, nicht alle.

                  es gibt vier bilder. in EINEM der felder muss ein wert stehen, also bild1 ODER bild2 ODER bild3 ODER bild4 dann will ich den datensatz sehen. (mindestens ein bild muss er angegeben haben)

                  dann gibt es einen text. wenn allerdings keins der bilder einen wert hat aber der text einen wert hat will ich den datensatz trotzdem sehen. also entweder eins der vier bilder ODER den mit text

                  wenn weder ein bild vorhanden ist noch ein text vorhanden ist aber eine telefonnummer in lk1 steht dann will ich den datensatz trotzdem sehen (lk1 ist kein numerisches feld sondern ein varchar-feld wie alle anderen auch).

                  in perl würde ich das so schreiben:
                  if ( (($alter eq "40") && ($blub eq "JA")) && (($bild1) || ($bild2) || ($bild3) || ($bild4) || ($text) || ($lk1)) ) { ... }

                  aber diese klammerlogik geht in SQL nicht. ergebnisse kommen, aber irrational, nicht nachvollziehbar. dat dingens spinnt.

                  1. Hallo,

                    es gibt vier bilder. in EINEM der felder muss ein wert stehen, also bild1 ODER bild2 ODER bild3 ODER bild4 dann will ich den datensatz sehen. (mindestens ein bild muss er angegeben haben)

                    ok, ich hatte Deinen zweiten Beitrag anders verstanden.

                    if ( (($alter eq "40") && ($blub eq "JA")) && (($bild1) || ($bild2) || ($bild3) || ($bild4) || ($text) || ($lk1)) ) { ... }

                    SQL ist kein Perl. Und wenn ausschließlich in $text 0 oder "0" stände, lieferte Dir Dein Perl-Code ebenfalls nicht das gewünschte Resultat (soweit ich mich erinnere).

                    aber diese klammerlogik geht in SQL nicht. ergebnisse kommen, aber

                    irrational, nicht nachvollziehbar. dat dingens spinnt.

                    Nö, MySQL macht zwar manch' seltsame Dinge, aber üblicherweise sehr reproduzierbare Dinge. Ich hege die Vermutung, dass Du an NULL-Werten scheiterst, auf die ich Dich gleich zu Beginn hinwies.

                    Im Gegensatz zu Programmiersprachen wie Perl oder PHP wird ein NULL-Wert *nicht* zu false ausgewertet, aber auch nicht zu true.

                    Taucht in Deinem Ausdruck in der WHERE-Klausel irgendwo ein NULL-Wert auf, so wird der Ausdruck zu NULL ausgewertet und ein entsprechender Datensatz nicht angezeigt,

                    Freundliche Grüße

                    Vinzenz

                    1. Ich hege die Vermutung, dass Du an NULL scheiterst

                      Im Gegensatz zu Programmiersprachen wie Perl oder PHP wird ein NULL-Wert *nicht* zu false ausgewertet, aber auch nicht zu true.

                      ja das klingt gut, vinzenz. Meine Sprache :-)

                      Jetzt muss ich kurz zurück gehen. Angenommen Tabelle quark mit 4 Varchar-Spalten. name, frucht, zucker, menge. Ich füge einen neuen Datensatz ein:

                      INSERT INTO quark (name,frucht,zucker) VALUES ('lecker','kirsche','')

                      dann ist: name,frucht ein bestimmter wert, zucker ein leerer string und menge NULL. stimmt das, VINZENZ?

                      wenn ich später nicht mehr weiß ob ich NULL oder einen leeren string eingefügt habe, muss ich dann so selektieren? (aufgabenstellung: finde datensatz mit lecker ohne zucker ODER ohne menge).

                      SELECT from quark WHERE ((zucker<>'' OR zucker IS NULL) OR (menge<>'' OR menge IS NULL)) AND name='lecker' ...

                      gibts einen ausdruck der bei beiden ('' und NULL) true zurückgibt?

                      ... WHERE (zucker IS LEER_FOR_IDIOT) OR (menge IS LEER_FOR_IDIOT) ... :-)

                      1. Hallo,

                        Ich hege die Vermutung, dass Du an NULL scheiterst

                        Im Gegensatz zu Programmiersprachen wie Perl oder PHP wird ein NULL-Wert *nicht* zu false ausgewertet, aber auch nicht zu true.

                        ja das klingt gut, vinzenz. Meine Sprache :-)

                        Jetzt muss ich kurz zurück gehen. Angenommen Tabelle quark mit 4 Varchar-Spalten. name, frucht, zucker, menge. Ich füge einen neuen Datensatz ein:

                        INSERT INTO quark (name,frucht,zucker) VALUES ('lecker','kirsche','')

                        dann ist: name,frucht ein bestimmter wert, zucker ein leerer string und menge NULL. stimmt das, VINZENZ?

                        Nicht unbedingt. Wenn der Standardwert für die Spalte "menge" der Leerstring ist, dann steht der Leerstring drin. Wenn die Spalte die Eigenschaft NOT NULL trägt, wird das INSERT scheitern. Ansonsten ja: dann steht NULL drin.

                        SELECT from quark WHERE ((zucker<>'' OR zucker IS NULL) OR (menge<>'' OR menge IS NULL)) AND name='lecker' ...

                        gibts einen ausdruck der bei beiden ('' und NULL) true zurückgibt?

                        Zum Beispiel könnte Dir die Funktion
                        COALESCE()
                        helfen:

                        ... (COALESCE(zucker, '') <> '') OR ...

                        Freundliche Grüße

                        Vinzenz

                        1. Nicht unbedingt. Wenn der Standardwert für die Spalte "menge" der Leerstring ist, dann steht der Leerstring drin. Wenn die Spalte die Eigenschaft NOT NULL trägt, wird das INSERT scheitern. Ansonsten ja: dann steht NULL drin.

                          ich verwalte meine tabellen in phpMyAdmin - 2.9.1.1-Debian-13 MySQL-Client-Version: 5.0.32 (ist aber wohl nicht wichtig).

                          alle felder dieser tabelle stehen auf NOT NULL. Einen Standardwert hab ich nicht angegeben, hab ich noch nie.

                          wenn ich nach IS NULL selektiere kommen O datensätze, wenn ich nach NOT NULL selektiere kommen ALLE datensätze. das müsste heissen ich habe KEIN NULL, in der gesamten tabelle nicht.

                          so, jetzt steh ma da - weil es dann kein NULL problem sein kann!? wenn ich keinen standardwert angegeben habe und in die spalte aber auch keinen '' Leerstring einfüge, das INSERT aber trotzdem funktioniert (was definitiv so ist) ... was steht dann in der spalte drin? INSERT mackert bei mir nur wenn ich in eine integerspalte die auf NOT NULL gestellt ist keinen wert eintrage, was logisch ist.

                          1. OK. dann hake ich dieses Problem als derzeit unlösbar ab, ausser es kann mir jemand sagen welcher wert bei NOT NULL in der spalte steht wenn ich in einem varchar-feld bei INSERT keinen wert angebe.

                            ich habs jetzt anders zum laufen gebracht aber mit blödem bauchgefühl. vielleicht werden nicht alle datensätze ausgegeben? ... blöd halt.

                            dafür hab ich wieder andere dinge gelernt, eine problemdiskussion ist nie verkehrt.

                            thanks all

                            1. Moin!

                              OK. dann hake ich dieses Problem als derzeit unlösbar ab, ausser es kann mir jemand sagen welcher wert bei NOT NULL in der spalte steht wenn ich in einem varchar-feld bei INSERT keinen wert angebe.

                              Da steht der Defaultwert drin, der beim Anlegen der Tabelle definiert wurde. Und das ist unabhängig von der NULL-Einstellung der Spalte.

                              Sowas zeigt dir PHPMyAdmin aber auch an.

                              ich habs jetzt anders zum laufen gebracht aber mit blödem bauchgefühl. vielleicht werden nicht alle datensätze ausgegeben? ... blöd halt.

                              Das Problem liegt eindeutig in der Formulierung deiner Abfragebedingung. Du bist vollkommen fixiert auf "ODER" und behauptest, das müsste so sein.

                              Jetzt gilt aber folgender logischer Zusammenhang:

                              (!A oder !B) <==> !(A und B) http://de.wikipedia.org/wiki/Aussagenlogik#Verneinung_einer_Konjunktion

                              Wenn dein !A also "bild <> ''" lautet, dann wäre A "bild == ''".

                              Daraus ergibt sich:
                              Der erste Ausdruck formuliert: Wenn Bild 1 kein Leerstring oder Bild 2 kein Leerstring, dann...

                              Das logische Äquivalent: Wenn Bild 1 ein Leerstring und Bild 2 ein Leerstring, dann NICHT...

                              Das einklammern und mit NOT logisch umdrehen - fertig.

                              Dein Wunsch nach "UND plus ODER" ist also nicht zwingend.

                              - Sven Rautenberg

                              1. Das Problem liegt eindeutig in der Formulierung deiner Abfragebedingung. Du bist vollkommen fixiert auf "ODER" und behauptest, das müsste so sein.

                                Jetzt gilt aber folgender logischer Zusammenhang:

                                (!A oder !B) <==> !(A und B)

                                • Sven Rautenberg

                                SELECT * FROM kaugummis WHERE kleb=? AND rig=? AND (blub AND blase AND flubber) NOT LIKE '' ORDER BY ...

                                so? und stimmt die schreibweise so auch? habs noch nicht versucht.

                                --

                                GUSTL
                                1. Moin!

                                  Das Problem liegt eindeutig in der Formulierung deiner Abfragebedingung. Du bist vollkommen fixiert auf "ODER" und behauptest, das müsste so sein.

                                  Jetzt gilt aber folgender logischer Zusammenhang:

                                  (!A oder !B) <==> !(A und B)

                                  • Sven Rautenberg

                                  SELECT * FROM kaugummis WHERE kleb=? AND rig=? AND (blub AND blase AND flubber) NOT LIKE '' ORDER BY ...

                                  so? und stimmt die schreibweise so auch? habs noch nicht versucht.

                                  Nein, du kannst die Verknüpfungen nicht kurz formulieren. Das, was in meinem Posting als "A" steht, ist der komplette Vergleich, also blub NOT LIKE "bla%".

                                  Und verwende nicht LIKE, wenn du keine unscharfe Platzhaltersuche machen willst: blub != "bla"

                                  In Summe:
                                  SELECT * FROM kaugummis WHERE kleb=? AND rig=? AND (blub != '' AND blase != '' AND flubber != '') ORDER BY ...

                                  So wäre die Syntax korrekt. Aber wozu jetzt noch die Klammern? Überflüssig, alles ist doch "AND"-verknüpft. Das ist dasselbe, als wenn alles addiert wird.

                                  - Sven Rautenberg

                                  1. In Summe:
                                    SELECT * FROM kaugummis WHERE kleb=? AND rig=? AND (blub != '' AND blase != '' AND flubber != '') ORDER BY ...

                                    So wäre die Syntax korrekt. Aber wozu jetzt noch die Klammern? Überflüssig, alles ist doch "AND"-verknüpft. Das ist dasselbe, als wenn alles addiert wird.

                                    • Sven Rautenberg

                                    richtig, klammerung hinfällig. ich muss irgendwie diese blöde oder-logik aus meinem hirn klopfen und in UND NICHT denken.

                                    ist eigentlich != '' exakt das selbe wie NOT LIKE?

                                    --
                                    gustl, der dummerweise dauernd wie ein mensch denkt
                                    1. Moin!

                                      richtig, klammerung hinfällig. ich muss irgendwie diese blöde oder-logik aus meinem hirn klopfen und in UND NICHT denken.

                                      ist eigentlich != '' exakt das selbe wie NOT LIKE?

                                      Nein. LIKE sorgt für eine Platzhaltersuche, wenn man _ oder % im String verwendet - was wiederum auch entsprechendes Escaping erfordert, sofern diese Zeichen auch als normales Zeichen gesucht und gefunden werden sollen.

                                      Mit LIKE findet man z.B. alles, was mit "bla" beginnt: feld LIKE "bla%"

                                      Mit einem Vergleich funktioniert sowas nicht.

                                      - Sven Rautenberg

                          2. Hallo Gustl,

                            Nicht unbedingt. Wenn der Standardwert für die Spalte "menge" der Leerstring ist, dann steht der Leerstring drin. Wenn die Spalte die Eigenschaft NOT NULL trägt, wird das INSERT scheitern.

                            ich muss mich ergänzen: das gilt nur im STRICT-SQL-Mode von MySQL

                            Ansonsten ja: dann steht NULL drin.

                            Das gilt auch für MySQL.

                            ich verwalte meine tabellen in phpMyAdmin - 2.9.1.1-Debian-13 MySQL-Client-Version: 5.0.32 (ist aber wohl nicht wichtig).

                            alle felder dieser tabelle stehen auf NOT NULL. Einen Standardwert hab ich nicht angegeben, hab ich noch nie.

                            im MySQL-machs-so-wie-es-nur-MySQL-Benutzer-gewohnt-waren-Modus (MySQL-Voreinstellung) wird der implizite Standardwert gesetzt, siehe http://dev.mysql.com/doc/refman/5.1/en/data-type-defaults.html.

                            wenn ich nach IS NULL selektiere kommen O datensätze, wenn ich nach NOT NULL selektiere kommen ALLE datensätze. das müsste heissen ich habe KEIN NULL, in der gesamten tabelle nicht.

                            Hier greift die IS-NULL-Optimization.

                            Freundliche Grüße

                            Vinzenz

          2. Mahlzeit Gustl,

            hallo vinzenz, ich versuchs mal so. was stimmt an dieser abfrage nicht?

            Ich bin zwar nicht Vinzenz - aber da stimmt so Einiges nicht ...

            my $sel=$dbh->prepare('SELECT * FROM kunden WHERE age=? AND blub=? AND (bild1 OR bild2 OR bild3 OR bild4 OR text OR lk1 <>?) ORDER BY hit DESC') || die $DBI::errstr;

            $sel->execute($age,'J','') || die $DBI::errstr; my $ref=$sel->fetchall_arrayref; my @liste = map {join";",@$_} @$ref;

              
            1\. Du hast ein SQL-Problem. [Warum postest Du dann Perl-Code?](http://community.de.selfhtml.org/zitatesammlung/zitat1353)  
              
            2\. Eigne Dir die Grundlagen der SQL-Syntax an. Da Du - trotz entsprechender Hinweise - das von Dir verwendete DBMS nicht genannt hast, kann ich Dir leider keine entsprechenden Dokumentationen bzw. Tutorials verlinken.  
              
            3\. ["die()" ist keine Fehlerbehandlung ...](http://community.de.selfhtml.org/zitatesammlung/zitat1282)  
              
              
            MfG,  
            EKKi  
            
            -- 
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            
            1. Ich bin zwar nicht Vinzenz - aber da stimmt so Einiges nicht ...

              1. Du hast ein SQL-Problem. Warum postest Du dann Perl-Code?
              1. Eigne Dir die Grundlagen der SQL-Syntax an. Da Du - trotz entsprechender Hinweise - das von Dir verwendete DBMS nicht genannt hast, kann ich Dir leider keine entsprechenden Dokumentationen bzw. Tutorials verlinken.
              1. "die()" ist keine Fehlerbehandlung ...

              MfG,
              EKKi

              »»

              ich appeliere an deine nachsichtigkeit, ekki, ich bin hobbyprogrammierer und habe keine ahnung welches datenbankmanagementsystem auf diesem server läuft. mysql 5. irgendwas? und den code, den hab ich halt zur sicherheit komplett gepostet wie ich ihn in im script stehen habe.

              wie auch immer: ich habe jetzt OR lk1 <>'' in OR lk1 >0 ersetzt und jetzt kommen richtige ergebnisse. ich hab keine ahnung wieso, es sind alles varchar-felder.

              wenn mir jemand erklären kann wieso dann macht das bitte, denn beim nächsten mal bin ich wieder so weit weil ich die ursache nicht kenne.

              für einen hobbybastler wie mich sind diese "versteckten hinweise" nicht hilfreich, im gegenteil. wenn "so einiges nicht stimmt", dann sagt halt einfach was nicht stimmt.

              trotzdem danke, es läuft jetzt, auch wenn ich keine ahnung habe wieso.

              --
              Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

              --
              G. DAVID
              1. "die()" ist keine Fehlerbehandlung ...

              Das mag in dem Kontext gestimmt haben und ist vom Prinzip auch richtig. "die()" ist aber im Grunde das Äquivalent zu throw. Die Fehlerbehandlung findet dementsprechend im catch Äquivalent statt. Also ohne den konkreten Kontext zu Wissen, ist dieses Zitat hier fehl am Platz.

              Struppi.

        2. Wenn in a bis d ein beliebiger Wert stehen darf - wieso willst du sie dann überhaupt in die WHERE-Klausel mit aufnehmen?

          Nicht darf, sondern es MUSS ein beliebiger Wert drinstehen.

          trifft auf die leere Zeichenkette auch zu - im Gegensatz zu NULL.
          Natürlich musst Du - wie in nahezu allen Programmiersprachen auch - jeden Vergleich explizit aufführen. Sag' bloß, das wäre in Perl nicht so ...

          Nein, ist es nicht. Eine leere Zeichenkette wird in Perl, ebenso wie Null und undef, zu einem unwahren Ausdruck. Du kannst also - wie auch in JS - einfach a || b || c ... schreiben.

          Aber vielleicht verstehe ich dich auch falsch.

          Struppi.

          1. Hallo Struppi,

            Nein, ist es nicht. Eine leere Zeichenkette wird in Perl, ebenso wie Null und undef, zu einem unwahren Ausdruck. Du kannst also - wie auch in JS - einfach a || b || c ... schreiben.

            Aber vielleicht verstehe ich dich auch falsch.

            ja. Insbesondere weil in SQL NULL nicht zu einem unwahren Ausdruck wird und dennoch nicht zu einem wahren ...

            Es ging mir hier nicht um den speziellen Wert Null, sondern um die Behandlung von Vergleichsoperationen im Allgemeinen, sprich

            Die Variablen $a, $b, $c und $d sollen auf den (beispielhaften) Wert, den die Variable $e enthält verglichen werden. Kannst Du dann in Perl einfach

            ($a || $b || $c || $d) == $e;

            schreiben?

            Freundliche Grüße

            Vinzenz

            1. Aber vielleicht verstehe ich dich auch falsch.

              ja. Insbesondere weil in SQL NULL nicht zu einem unwahren Ausdruck wird und dennoch nicht zu einem wahren ...

              Mir ging es um den oder-Vergleich - aber du hast Recht ich hab's falsch verstanden (oder besser zu ungenau gelesen)

              Struppi.

  2. Hallo Gustav

    select * from kunden WHERE (a OR b OR c <>'') AND d='WERT' AND e='WERT' so gehts auch nicht.

    Auf der linken UND der rechten Seite der logischen Operatoren muss ein Ausdruck stehen, der den Wert TRUE oder FALSE ergibt. Ist das der Fall? Hat a und b einen dieser Werte?

    Außerdem ist die Rangfolge der logische Operatoren zu beachten.

    MfG
    Franz