MS SQL -> SQL Fehler ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MS SQL -> SQL Fehler ?

    Hallo, ich habe eine Abfrage, welche sich meiner Meinung nach an den
    ANSI Standard hält, und mit MySQL auch funktioniert
    (Auszug aus der Query)
    Code:
    SELECT
    f2.forum_id,
    	f2.forum_name,
    	f2.forum_comment,
    	f.forum_id,
    	f.forum_name,
    	...
    FROM	from forums AS f 
    LEFT JOIN forums as f2 
    	ON(f.forum_id=f2.forum_parent)
    	...
    WHERE 	f.forum_level=0 
    	AND
    	...
    GROUP BY	f2.forum_id 
    ORDER BY f.forum_order,f2.forum_order
    mach ich die Abfrage so, meckert MS SQL, das da noch viele Spalten mit in die Gruppierung müssen, da sie nicht zur Aggregatfunktion gehören. Dabeo handelt es sich um alle Spalten aus der Tabelle "forums as f2".

    schreibe ich aber
    Code:
    FROM	from forums AS f , forums as f2 
    ...
    WHERE f.forum_id=f2.forum_parent
    meckert er, er kennt "f" nicht
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

  • #2
    bin mir nicht ganz sicher aber mach mal aus "AS f" einfach nur f
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Jep, das 'AS' ist gehört nicht zum ANSI-Standard.
      "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

      Kommentar


      • #4
        genau das selbe gemeckere von MSSQL ohne das AS
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          Was bedeutet im Ausdruck:

          FROM from forums AS f

          das "FROM from" ??
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            Tippfehler meinerseits, da ich nur nen Teil der Abfrage hier mal gepostet habe
            TBT

            Die zwei wichtigsten Regeln für eine berufliche Karriere:
            1. Verrate niemals alles was du weißt!


            PHP 2 AllPatrizier II Browsergame

            Kommentar


            • #7
              Sehr klug ... !
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                Gut, du hast es nicht anders gewollt, dann nimm die ganze Abfrage
                kannste mir dann sagen, was da los ist ?
                Code:
                SELECT	
                	f2.forum_id,
                	f2.forum_name,
                	f2.forum_comment,
                	f.forum_id,
                	f.forum_name,
                	f.forum_comment,
                	t.thread_id,
                	t.thread_time,
                	t.thread_last_answer,
                	t.thread_last_time,
                	t.thread_last_user_nick,
                	f2.forum_themes,
                	f2.forum_themes_hide,
                	f2.forum_answer,
                	f2.forum_answer_hide,
                	f2.post_id,
                	fs.forum_show,
                	sum(f1.forum_themes),
                	sum(f1.forum_themes_hide),
                	sum(f1.forum_answer),
                	sum(f1.forum_answer_hide) 
                FROM pxp_1_forums f 
                LEFT JOIN pxp_1_forums f2 
                	ON ( f.forum_id = f2.forum_parent )
                LEFT JOIN pxp_1_forums_forums ff 
                	ON ( f2.forum_id = ff.forum_id ) 
                LEFT JOIN pxp_1_forums f1 
                	ON ( ff.child = f1.forum_id ) 
                LEFT JOIN pxp_1_groups_rights gr1 
                	ON ( gr1.group_id=4 and gr1.forum_id = f1.forum_id )
                LEFT JOIN pxp_1_user_rights ur1 
                	ON ( ur1.user_id=2 and ur1.forum_id = f1.forum_id )
                LEFT JOIN pxp_1_groups_rights gr 
                	ON ( gr.group_id=4 and gr.forum_id = f2.forum_id )
                LEFT JOIN pxp_1_user_rights ur 
                	ON ( ur.user_id=2 and ur.forum_id = f2.forum_id )
                LEFT JOIN pxp_1_threads t 
                	ON ( f2.thread_id = t.thread_id )
                LEFT JOIN pxp_1_forums_show fs 
                	ON ( f.forum_id = fs.forum_id AND fs.user_id=2 )
                WHERE 
                	f.forum_level=0 
                	AND 
                	f2.forum_level=1 
                	AND	
                	(	(	(	gr1.group_right_read=1 
                				AND 
                				ur1.user_right is null
                			)
                			OR 
                			ur1.user_right_read=1
                		)
                		OR 
                		f1.forum_id is null
                	)
                	AND
                	(	(	gr.group_right_read=1 
                			AND 
                			ur.user_right is null
                		)
                		OR 
                		ur.user_right_read=1 
                	)
                GROUP BY f2.forum_id 
                ORDER BY f.forum_order,f2.forum_order
                TBT

                Die zwei wichtigsten Regeln für eine berufliche Karriere:
                1. Verrate niemals alles was du weißt!


                PHP 2 AllPatrizier II Browsergame

                Kommentar


                • #9
                  Ok ANSI Standard verlangt wenn ich richtig gedeutet habe in den Joins komplette Tabellen namen und keine Aliase

                  ( oder meine Referenz is nicht ganz klar zu verstehen || ich bin zu doof das zu lesen )
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    in den Joins muß der Alias stehen, da zB mySQL sonst die tabelle nicht findet
                    TBT

                    Die zwei wichtigsten Regeln für eine berufliche Karriere:
                    1. Verrate niemals alles was du weißt!


                    PHP 2 AllPatrizier II Browsergame

                    Kommentar


                    • #11
                      Tja, ich würd mal alle Aliase weglassen und testen.

                      Ich finde in der MySQL Referenz nur solche Syntax bei Joins mit ON klausel:

                      mysql> select table1.* from table1
                      LEFT JOIN table2 ON table1.id=table2.id
                      where table2.id is NULL;

                      Dort steht nichts von Aliasen.
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        und wie soll das gehen ohne Aliase ?

                        dir Tabelle pxp_1_forums ist dreimal drin ( f, f1, f2 )
                        TBT

                        Die zwei wichtigsten Regeln für eine berufliche Karriere:
                        1. Verrate niemals alles was du weißt!


                        PHP 2 AllPatrizier II Browsergame

                        Kommentar


                        • #13
                          tja wie wärs alle Joins, die innerhalb der gleichen Tabelle sind in WHERE Clauseln zu packen, danach die ergänzenden Bedingungen?
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar


                          • #14
                            wie meinst du das?
                            TBT

                            Die zwei wichtigsten Regeln für eine berufliche Karriere:
                            1. Verrate niemals alles was du weißt!


                            PHP 2 AllPatrizier II Browsergame

                            Kommentar


                            • #15
                              Na, Du nimmst keine Aliase und die Joins, die sich innerhalb einer Tabelle befinden zB:
                              ON f.ID = f1.parent

                              machst Du als WHERE Bedingung zB:
                              WHERE pxp_1_forums.ID = pxp_1_forums.parent

                              vielleicht ist das der richtige Ansatz...
                              Who knows?
                              Beantworte nie Threads mit mehr als 15 followups...
                              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                              Kommentar

                              Lädt...
                              X