Fehler bei Abfrage über 2 Tabellen

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

  • Fehler bei Abfrage über 2 Tabellen

    Meine Tabellenstruktur: Ich habe zwei Tabellen (t1 und t2), welche beide eine Spalte "date" aufweisen (ist vom Typ DATE). Nun möchte ich eine Abfrage über t1 und t2, die mir einfach alle Datensätze von t1 und t2 geordnet nach dem Datum anzeigt.

    Bei "SELECT * FROM t1,t2 ORDER BY date" erhalte ich den Fehler: #1052 - Column: 'date' in order clause is ambiguous

    Dann habe ich gelesen, dass ich erst angeben muss nach welcher Tabelle sortiert werden soll (http://www.tutorials.de/tutorials155674.html), aber wenn mit

    "SELECT * FROM t1,t2 ORDER BY t1.date" werden mehr Zeilen angezeit als eigentlich in beiden Tabellen zusammen vorhanden sind (t1: 3 Datensätze; t2: 3 Datensätze -> Ausgabe nach dem SELECT: 9 Datensätze ??)

    Wieso kann ich nicht einfach die Datensätze nach dem Datum sortieren und dabei über beide Tabellen gehen?

    ciao

  • #2
    also erstmal sagt deine Fehlermeldung doch schon alles aus das Feld date ist mehrdeutig definiert und desweiteren erzeugst Du mit deiner Query ein karthesisches Produkt...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      gibt es denn irgendeine Beziehung zwischen deinen beiden Tabellen?
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Es muss heissen:

        SELECT * FROM t1,t2 WHERE t1.date=t2.date ORDER BY t1.date

        Ausser es sind keine sinnverwandten Tabellen. Was steht denn noch so alles in den Tabellen drin? Und was haben die miteinander zu tun?

        Kommentar


        • #5
          SELECT * FROM t1,t2 WHERE t1.date=t2.date ORDER BY t1.date
          das ist doch wohl nicht dein ernst.

          dafür nimmt man JOIN.
          Code:
          SELECT
              *
          FROM
              t1
                  INNER JOIN t2 ON t1.date = t2.date
          ORDER BY
              t1.date
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Ich weis nicht genau was sinnverwandt heist. Bei den Tabellen sind manche Spalten gleich (sowohl vom Spaltenname als auch vom Spalten Typ her). Wenn ich das richtig verstehe werden bei den Selects, die ihr mir vogeschlagen habt nur Datensätze ausgegeben, wo das Datum eines Datensatzes der einen Tabelle gleich dem Datum eines Datensatzes der anderen Tabelle ist; genau das soll aber NICHT sein. Um es etwas zu illustrieren: Eine Bücherei verkauft Bücher und CDs. Es gibt eine Tabelle in der alle Bücher stehen, eine andere in der alle CDs abgespeichert sind. Beide Tabellen haben meinetwegen die Spalten Autor, Titel, Erscheinungsdatum und Verlag gemeinsam, Bücher jedoch noch eine Spalte für die ISBN und CDs noch eine Spalte, wo die Länge der CD in Minuten drin steht. Was ich jetzt suche ist ein Select über alle CDs und Bücher, das mir geordnet nach Erscheinungsdatum den Titel (vom Buch bzw. der CD) zurückliefert.

            Besten Dank für euer Bemühen,

            ciao

            Kommentar


            • #7
              tipp:

              baue mal deine DB um.

              denn ob buch oder cd, die daten sind quasi bis auf eine spalte die gleichen.

              also packt man das auch zusammmen in eine tabelle. eine weitere tabelle wird via 1:n integriert, um zu definieren, um was es sich eigentlich handelt. (buch oder cd).

              wenn du die tabellen entsprechend umbaust, hast du auch kein problem.

              ansonsten musst du es mit 2 queries machen.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                guckst du union im Manual ...

                Kommentar


                • #9
                  Original geschrieben von Abraxax
                  das ist doch wohl nicht dein ernst.

                  dafür nimmt man JOIN.
                  Code:
                  SELECT
                      *
                  FROM
                      t1
                          INNER JOIN t2 ON t1.date = t2.date
                  ORDER BY
                      t1.date
                  Ey Haxe

                  SELECT cols
                  FROM t1,t2
                  WHERE t1.col = t2.col

                  is auch ein Join
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    ja. aber keiner, den man nehmen sollte.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      kommt drauf an was man erzielen moechte
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar


                      • #12
                        das mag sein. aber verstehen kann ich es dennoch nicht.

                        es gibt LEFT/INNER/RIGHT JOIN. damit kann man alles abbilden, was man will. ;-)
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Weil Du zu sehr MySQL orientiert bist...
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar


                          • #14
                            Original geschrieben von MelloPie
                            Weil Du zu sehr MySQL orientiert bist...
                            was aber leider zu > 90% einsatz findet. zumindest in diesen gefilden. ;-)
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              wie auch immer zumindest ist es auch unter MySQL eine Art von Join...
                              Beantworte nie Threads mit mehr als 15 followups...
                              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                              Kommentar

                              Lädt...
                              X