Ankündigung

Einklappen
Keine Ankündigung bisher.

LEFT OUTER JOIN auf Nicht-Tabelle

Einklappen

Neue Werbung 2019

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

  • LEFT OUTER JOIN auf Nicht-Tabelle

    Hallo Leute,

    ich benötige ein LEFT OUTER JOIN wie folgt:


    ...
    Code:
    LEFT OUTER JOIN ( SELECT nr, sum(anzahl)
                      FROM tabelle2
                      GROUP BY nr
                    ) AS liste
                 ON tabelle1.nr = liste.nr
    ...

    An dieser Umsetzung scheitert es bei mir. MySQL bringt mir hier immer den Fehler 1267.

    Wie kann ich trotzdem dieses Problem lösen?

    Vielen Dank[/code]

  • #2
    Da fehlt das SELECT vor der eigentlichen JOIN ^^

    Was genau willst du eigentlich und was ist eine "Nicht-Tabelle"?

    Kommentar


    • #3
      Hallo,

      als Nicht-Tabelle habe ich das Ergebnis einer SELECT-Anweisung bezeichnet.

      Die Tabelle2 enthält Warenzugänge, dass heisst, die laufenden Zugänge eines Artikels (nr) werden mit der Stückzahl (anzahl) und Datum erfasst.


      Code:
      SELECT shopdb.label                 AS "Label",
             shopdb.name                  AS "Name",
             shopdb.nr                    AS "ID",
             verkaufsliste.rechnungen     AS "Anzahl der Rechnungen",
             verkaufsliste.anzahlverkauft AS "verkaufte Stück"
       
      FROM ( SELECT article_id, 
                    count(*)    AS rechnungen,
                    sum(number) AS anzahlverkauft
             FROM order_article
             WHERE order_id IN ( SELECT order_id
                                 FROM   orders
                                 WHERE  o_rechnung > 0
                               ) AND
                   lcase(left(article_id,1)) = 'l' 
             GROUP BY article_id
           ) AS verkaufsliste
      
      RIGHT OUTER JOIN shopdb 
                    ON shopdb.nr = verkaufsliste.article_id
      LEFT OUTER JOIN ( SELECT nr, sum(anzahl)
                        FROM tabelle2
                        GROUP BY nr
                      ) AS liste
                   ON shopdb.nr = liste.nr 
      WHERE lcase(left(shopdb.nr,1)) = 'l'
      
      ORDER BY shopdb.nr

      Kommentar


      • #4
        Zitat von inu
        MySQL bringt mir hier immer den Fehler 1267.
        Genau, und dann sagt es Dir auch noch, welche collations Du nicht miteinander nutzen kannst in Deiner Abfrage.

        Kommentar


        • #5
          Naja, ohne diesen LEFT-OUTER-JOIN läuft es ja. Also muss es ja an diesem JOIN liegen!

          Kommentar


          • #6
            2 min Suche mit Google ergab

            Zitat von http://dev.mysql.com/doc/refman/4.1/en/charset-collation-charset.html
            However, in versions of MySQL 4.1 before 4.1.8, the statement fails:
            Code:
            mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);
            ERROR 1267 (HY000): Illegal mix of collations
            (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE)
            for operation 'substr_index'
            This happens because the automatic character set conversion of '@' does not occur and the string operands have different character sets (and thus different collations):
            MySQL Manual

            Es scheint also, als hättest du auf den verschiedenen Tabellen verschiedene Zeichensätze, die sich nicht so einfach gegenseitig konvertieren lassen. Schau dir mal den Link an, da dürftest du Lösungen finden.

            Kommentar


            • #7
              Und diese ERROR 1267 (HY000): Illegal mix of collations ... Meldung hast Du nicht bekommen, inu? Nur die Zahl?

              Kommentar


              • #8
                Komisch, ich hab den Fehler "nur mit der Zahl" trotzdem gefunden

                Kommentar


                • #9
                  Ich ja auch (oder ich rate bei jedem mysql Fehler, dass es etwas mit collations zu tun hat; kann natürlicvh auch sein), aber darum geht es nicht.

                  Kommentar


                  • #10
                    Ich erhalte nur diesen Fehler hier:

                    MySQL meldet:
                    #1267 -

                    Kommentar


                    • #11
                      Nein, jetzt hast du mehr
                      Zitat von KingCrunch
                      Code:
                      ERROR 1267 (HY000): Illegal mix of collations

                      Kommentar


                      • #12
                        Naja schön, aber ein illegaler Mix kann dies nicht sein. Ich habe das bereits merhfach geprüft. Alle in dieser SQL-Abfrage beteiligten Tabellen sind auf "latin1_german1_ci" eingestellt.

                        Kommentar


                        • #13
                          Wie wird die Abfrage ausgeführt? Oder wo? Mit welchem Programm?
                          Sprich: Wodurch wird die Textmeldung unterdrückt oder verschluckt?
                          Da finden sich nämlich oft (so auch in diesem Fall) wertvolle Informationen drin. Und dann würde sich sicher auch recht schnell
                          Zitat von inu
                          Naja schön, aber ein illegaler Mix kann dies nicht sein.
                          als Irrtum herausstellen.

                          Kommentar


                          • #14
                            Schön, alle beteiligten Tabellen sind latin1, aber das heißt nicht, dass mysql nicht selbst mit einem andere Zeichensatz arbeitet, was bewirkt, das temporäre Tabellen (womit du ja schließlich auch arbeitest) oder was auch immer andere Zeichensätze liefern.

                            Deshalb beherzige Schnulli und such mal die vollständige und detailierte Fehlermeldung

                            Kommentar


                            • #15
                              Danke an Alle!!!!

                              Ich habe den Fehler gefunden: Es lag sehr wohl an dem Zeichensatz. Die Tabellen standen zwar auf Deutsch, jedoch ein einziges Feld in der Tabelle stand noch auf Schwedisch.

                              Kommentar

                              Lädt...
                              X