Announcement

Collapse
No announcement yet.

SQL Abfrage verstehen :(

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

  • SQL Abfrage verstehen :(

    Ich habe ein Problem.

    ich bin noch nicht so gut in SQL und habe mir eine SQL abfrage gebastelt die auch das tut was ich haben will aber verstanden habe ich die abfrage nicht .

    Kann mir vielleicht einer erklkären was bei dieser Abfrage abläuft ???


    select c.srnr from
    (Select distinct x.srnr from basdta.spe14p as x where x.srnr='10017408' and x.sragerg='+' and x.sragk='s') As a,
    (Select distinct y.srnr from basdta.spe14p as y where y.srnr='10017408' and y.sragerg='-' and y.sragk='Lu(a)')As b,
    (Select distinct z.srnr from basdta.spe14p as z where z.srnr='10017408' and z.sragerg='+' and z.sragk='Lu(b)')As c



    Also einfach die logik die dahinter steckt was er macht ....

  • #2
    Hallo,

    ich glaube die Logik kann dir keiner ausser du selber erklären. Das Statement ist ziemlich "wirr" und ich kann mir nicht vorstellen, daß ein wirklich gewolltes Ergenbis dabei herauskommt.
    Ich kann dir maximal beschreiben, was der SQL-Server mit deiner Abfrage macht:

    Zuerst löst er die drei Inline-Views auf. Diese sind alle eine einspaltige Untermenge der Tabelle basdta.spe14p. In dem äußeren Select verbindet er die drei Inline-Views quasi wie Tabellen miteinander. Da aber keine Beziehung in Form eines expliziten oder impliziten Join angegeben wurde, bildet er aus allen drei Inline-Views ein Kreuzprodukt (d.h. er kombiniert jede Zeile jeder Inline-View mit jeder Zeile der beiden anderen). Von diesem Kreuzprodukt wird dann nur die Spalte mit den Werten aus c ausgegeben.
    Im Endeffekt wird die Anzeige von
    [highlight=sql]Select distinct z.srnr
    from basdta.spe14p as z
    where z.srnr='10017408' and z.sragerg='+' and z.sragk='Lu(b)'[/highlight] mehrfach wiederholt und zwar genau (Anzahl der DS von a * Anzahl der DS von b) - und diese Logik erschließt sich mir dann nicht.

    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
      Also was mir aufgefallen ist

      wenn eine der drei unterabfragen ein leeres Resultset liefert so ist das gesamte Resultset auch leer. Dabei ist es egal welche der drei unterabfragen das ist . Kann das von der SQL Logik her stimmen ?

      Comment


      • #4
        Originally posted by firestone84 View Post
        Also was mir aufgefallen ist

        wenn eine der drei unterabfragen ein leeres Resultset liefert so ist das gesamte Resultset auch leer. Dabei ist es egal welche der drei unterabfragen das ist . Kann das von der SQL Logik her stimmen ?
        Wie Falk sagte, wir das Kreuzprodukt gebildet
        Ist nun eine der Tabellen leer, ist das Kreuzprodukt leer,
        denn etwas mal 0 ist 0...

        Comment


        • #5
          supi dann tut die abfrage genau das was sie soll und ist für meinen gebrauch auch logisch

          Comment

          Working...
          X