Announcement

Collapse
No announcement yet.

Sql Frage -> SELECT UNION SELECT

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

  • Sql Frage -> SELECT UNION SELECT

    Hallo , ich habe ein Problem.

    Folgendes Beispiel:
    Code:
    SELECT tmp.v, tmp.p FROM 
    	(SELECT t1.ida AS v, t1.feld1 AS p FROM Tab1 AS t1
    	UNION
    	SELECT t2.idb AS v, t2.feld2 AS p FROM Tab2 AS t2) AS tmp
    WHERE tmp.v IN (SELECT MAX(tmp.v) FROM tmp GROUP BY tmp.p)
    Warum kennt er die tmp Tabelle nicht beim FROM?Wer kann mir da helfen?

    MfG Ronnsen

  • #2
    Originally posted by joschika77 View Post
    Hallo , ich habe ein Problem.

    Folgendes Beispiel:
    Code:
    SELECT tmp.v, tmp.p FROM 
    	(SELECT t1.ida AS v, t1.feld1 AS p FROM Tab1 AS t1
    	UNION
    	SELECT t2.idb AS v, t2.feld2 AS p FROM Tab2 AS t2) AS tmp
    WHERE tmp.v IN (SELECT MAX(tmp.v) FROM tmp GROUP BY tmp.p)
    Warum kennt er die tmp Tabelle nicht beim FROM?Wer kann mir da helfen?

    MfG Ronnsen
    Vermute mal das das rote zuerst ausgewertet wird und deshalb Tabelle tmp unbekannt ist

    Comment


    • #3
      Hast du ne Ahnung wie man das lösen kann?

      Comment


      • #4
        Hast du ne Ahnung wie man das lösen kann?
        Vielleicht so: (ungetestet und das DBMS sollte den OVER operator unterstützen)

        Code:
        SELECT X.v, X.p FROM 
           (SELECT  MAX (Tmp.V) OVER () AS Maxv , tmp.v, tmp.p
        	FROM  (SELECT t1.ida AS v, t1.feld1 AS p FROM Tab1 AS t1
        		UNION
        		SELECT t2.idb AS v, t2.feld2 AS p FROM Tab2 AS t2
        		) AS tmp
           ) AS X 
        WHERE X.v = x.MaxV

        Comment


        • #5
          Originally posted by joschika77 View Post
          ...Warum kennt er die tmp Tabelle nicht beim FROM?...
          Weil es in diesem Kontext keine Tabelle tmp gibt!
          Du mußt entweder dein Inline-Konstrukt nochmals im FROM des Subselects aufführen, oder besser dafür eine echte View anlegen.

          [highlight=sql]
          CREATE VIEW tmp AS
          SELECT t1.ida AS v, t1.feld1 AS p FROM Tab1 AS t1
          UNION
          SELECT t2.idb AS v, t2.feld2 AS p FROM Tab2 AS t2;
          [/highlight]
          [highlight=sql]
          SELECT tmp.v, tmp.p FROM tmp
          WHERE tmp.v IN (SELECT MAX(tmp.v) FROM tmp GROUP BY tmp.p)
          [/highlight]

          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

          Working...
          X