Announcement

Collapse
No announcement yet.

Interessante SqlFrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Interessante SqlFrage

    Hallo Zusammen,

    ich hab neulich etwas seltsames bei einer Sql.-Abfrage festgestellt, wo ich auch nicht wüsste, wonach ich im Forum suchen soll.

    Ich schreibe einfach mal eine Pseudoabfrage hier rein. Falls es nicht reicht. schreib ich auch gerne noch einen Tabellenaufbau mit einer entsprechenden Abfrage hier rein.

    Es handelt sich um folgendes:

    select order1 from order
    where
    0=(select count(order1) from order where order1 <3)

    Diese Abfrage liefert ein anderes Ergebniss (falsches Ergebniss) wie

    select order1 from order
    where
    (select count(order1) from order where order1 <3)=0

    Kann mir jemand erklären warum das so ist?

  • #2
    Hallo,

    was bedeutet "ein anderes Ergebniss (falsches Ergebniss)"?
    Werden andere (mehr/weniger) Datensätze gelistet oder sind diese nur "anders" sortiert?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      ich bekomme hier weniger Datensätze. Wenn du willst, nehme ich mir gerne die zeit ein Beispiel zu posten.

      In meinem Fall bekomme ich mit der "falschen" Konstellation 2 Datensätze und mit der "richtigen" 0 Datensätze. Was auch stimmt. Nur ich weiss nicht, was für ein Unterschied das macht mit den Konstellationen.

      Comment


      • #4
        Also normalerweise sollte es völlig egal sein in welcher Reiehnfolge der Vergleich formuliert wird. Welches DBMS wird verwendet und welche "Randbedingungen" gibt es, die in deiner "Pseudoabfrage" mglws. nicht berücksichtigt sind?

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Also des Rätselslösung ist anscheinend folgendes. Er castet von links nach rechts.

          select order1 from order
          where
          '0'=(select count(order1) from order where order1 <3) ->Das funktioniert auch

          select order1 from order
          where
          0=(select to_number(count(order1)) from order where order1 <3) ->Das funktioniert auch

          Btw es wird oracle benützt.

          Comment


          • #6
            Hallo,

            da COUNT() einen numerischen Wert liefert, sollte bei einem Vergleich mit einer numerischen 0 eigentlich kein impliziter Cast stattfinden. Ich kann das auch nicht wirklich nachvollziehen (habe aber auch kein Oracle zur Verfügung).

            Poste mal bitte ein paar Beispieldaten und die Statements dazu, mit denen sich das nachvollziehen lässt.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hi,

              das Problem kann ich nicht nachvollziehen. Das Ergebnis ist entweder immer "Alle Daten" (0=0) oder keine Daten (0=1).

              Dim
              Zitat Tom Kyte:
              I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

              Comment

              Working...
              X