Announcement

Collapse
No announcement yet.

Where Bedingung umgeschrieben und liefert nicht alle Werte

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

  • Where Bedingung umgeschrieben und liefert nicht alle Werte

    Hallo leute,
    habe ein probleme und komme einfach nicht weiter.

    Also:
    Ich lese aus einer Tabelle aus und bekomme bei einer WHERE Bedingung die richtigen Ergebnise raus und bei der selber WHERE Bedingung etwas umgeschrieben fehlen einige Werte.
    Woran kann das liegen?


    Code:
      Where (
            (
              (ref.Start_ID = @Start_ID OR ref.Start_ID IS NULL OR @Start_ID IS NULL) AND 
              (ref.Ziel_ID  = @Ziel_ID OR ref.Ziel_ID  IS NULL OR @Ziel_ID IS NULL)
            ) OR 
    	       
             (
              (ref.Ziel_ID  = @Start_ID OR ref.Ziel_ID  IS NULL OR @Start_ID IS NULL) AND 
              (ref.Start_ID = @Ziel_ID OR ref.Start_ID IS NULL OR @Ziel_ID IS NULL) AND 
              ref.bidirektional = 1
             )
          )
    
    
    ---------------------2. Where Bedingung-------------------------------------------
    	
      
      
     Where (
            (
              ISNULL(ref.Start_ID, @Start_ID)  = ISNULL(@Start_ID, ref.Start_ID) AND 
              ISNULL(ref.Ziel_ID,  @Ziel_ID )  = ISNULL(@Ziel_ID,  ref.Ziel_ID ) 
            ) OR 
            
            
    		   ( 
            ISNULL(ref.Ziel_ID , @Start_ID)  = ISNULL(@Start_ID, ref.Ziel_ID ) AND 
            ISNULL(ref.Start_ID, @Ziel_ID)   = ISNULL(@Ziel_ID,  ref.Start_ID) AND 
            ref.bidirektional = 1
           )
          )
    habe gedacht, es könnte daran liegen, dass es vielleicht Probleme gibt wenn beide Werte NULL sind, da man dann NULL mit NULL ersetzen würde, aber das ist es nicht.

    Hoffe jemand kann mir helfen.

    Danke!

    Gruß
    semcor

  • #2
    Hallo semcor,

    ich denke schon dass es an Null liegt.
    ISNULL(ref.Start_ID, @Start_ID) = ISNULL(@Start_ID, ref.Start_ID)
    Wenn hier ref.Start_ID und @Start_ID beide null sind, wird der Vergleich zu
    Code:
    null = null
    ersetzt.
    Das ergibt in T-SQL meines Wissens ein unbestimmtes Ergebnis und nicht True. Schwer zu sagen was dann passiert.

    Gruß, Bruno

    Comment


    • #3
      Ein Vergleich mit NULL liefert immer FALSE; deswegen gibt es auch extra den Vergleich mit IS NULL.

      [highlight=SQL]SELECT 'Gleich Null'
      WHERE NULL = NULL;

      SELECT 'Ist Null'
      WHERE NULL IS NULL;[/highlight]
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        ja stimmt, tatsächlich NULL = NULL ist nicht true.

        Danke euch!

        gruß
        semcor

        Comment

        Working...
        X