Ankündigung

Einklappen
Keine Ankündigung bisher.

SELECT über zwei Tables mit WHERE und AND

Einklappen

Neue Werbung 2019

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

  • SELECT über zwei Tables mit WHERE und AND

    Ich stehe nun inzwischen seit drei Tagen vor dem Problem das ich eine Datenbankabfrage machen möchte und ich die leider nicht hin bekomme. Ich habe mich bereits versucht in JOIN sowie UNION einzuarbeiten; aber evtl brauche ich Hilfe dabei oder ganz neue Ansätze.

    Ich habe einmal diese Tabelle:

    Code:
    pn_subs
    -> id
    -> name
    -> email
    -> format
    -> regdate
    -> edittime
    -> code
    -> status
    Und einmal diese Tabelle:

    Code:
    pn_cats
    -> id
    -> code
    -> cat
    Ich möchte nun folgendes machen: Aus der Tabelle "pn_subs" sollen alle Einträge genommen werden bei denen die Zeile "status" auf "1" steht, in der Tabelle "pn_cats" in der Zeile "code" meinetwegen auf "xyz" und in der Zeile "cat" zum Beispiel "15" steht.

    Code:
    SELECT * FROM pn_subs WHERE status = '1' UNION ALL SELECT * from pn_cats WHERE cat = '15' AND code = 'xyz'
    Diese Abfrage geht scheinbar nicht da ich diese Meldung erhalte:

    Code:
    The used SELECT statements have a different number of columns
    Über jede Idee oder Lösungsvorschlag bin ich dankbar.

  • #2
    Das UNION geht nicht, da beide Tabellen unterschiedliche Spaltendefinitionen haben. EIn UNION muss aus der gleichen Anzahl Spalten (und gleichem Typ) bestehen.

    Mein Vorschlag:
    Code:
    SELECT * FROM pn_subs
    JOIN pn_cats ON pn_subs.id = pn_cats.id
    WHERE pn_subs.status = 1 AND pn_cats.code = 'xyz' AND pn_cats.cat = 15

    Kommentar


    • #3
      Vielen Dank für deine Antwort und deine Erläuterung zu UNION.

      Wenn ich deinen Vorschlag anwende bekomme ich zwar keinen Fehler, aber auch kein Ergebnis.

      Kommentar


      • #4
        Haben die Tabellen denn eine Beziehung zueinander? Aus der Anforderung geht das so nicht hervor, die wirkt ein bisschen zusammenhangslos.
        http://sqlfiddle.com/ Beispieldaten helfen

        Kommentar


        • #5
          Wenn ich deinen Vorschlag anwende bekomme ich zwar keinen Fehler, aber auch kein Ergebnis.
          Du kannst ja mal versuchen stückweise, d.h. Zeile für Zeile, auszugeben. Wenns klappt eine neue Zeile dazu. Wichtig ist ja erstmal dass du die Datensätze "zusammenwirfst", das WHERE kann später immer noch rein (bzw. können die Bedingungen auch ins ON rein.)

          Kommentar


          • #6
            Ich GLAUBE so langsam zu verstehen wie das mit dem JOIN und ON funktioniert.

            Code:
            SELECT * FROM pn_subs
            JOIN pn_cats ON pn_subs.code = pn_cats.code
            WHERE pn_subs.status = 1 AND pn_cats.cat = '2'
            Kann es sein das man in beiden Tabellen mindestens eine Spalte identisch haben muss? In diesem Beispiel ist es der "code" der in beiden Tabellen gleich ist. Über JOIN holt man die zweite Tabelle dazu und über ON legt man die Spalte fest die identisch ist. Ist das richtig?

            @VPh Meintest du das mit der Beziehung zueinander? - error_reporting habe ich immer an und Fehler werden selbstverständlich alle ausgegeben.

            @Spamversender So habe ich das gerade versucht. Bin gespannt ob ich das richtig geschlussfolgert habe oder es purer Zufall ist das es klappt ^^

            Kommentar


            • #7
              Code:
              Kann es sein das man in beiden Tabellen mindestens eine Spalte identisch haben muss? In diesem Beispiel ist es der "code" der in beiden Tabellen gleich ist. Über JOIN holt man die zweite Tabelle dazu und über ON legt man die Spalte fest die identisch ist. Ist das richtig?
              Ja. Mit dem ON kann man novh beliebige Bedingungen definieren. Bei dir ist es so, dass die Bedingung, dass zwei Datensätze zusammengeworfen werden, die gleiche ID ist. mit AND und so kannst du noch weitere Bedingungen definieren (z.B. ID > 5).

              Kommentar

              Lädt...
              X