Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlende Einträge in Tabelle finden

Einklappen

Neue Werbung 2019

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

  • Fehlende Einträge in Tabelle finden

    Hallo zusammen,
    ich habe 2 Tabellen, in der einen habe ich als Fremdschlüssel den Primärschlüssel der anderen. Nun will ich alle einträge der 2ten Tabelle finden wo der Fremdschlüssel in der Ersten Tabelle nicht mehr zu finden ist.

    "select a.* from Tabelle1 as a, Tabelle 2 as b where a.avis_id<>b.aivs_id"

    So habe ich es versucht, bringt aber nicht das Ergebniss welches ich benötige.

    Jemand eine Idee dazu?

    Besten dank!

    Cyberbob

  • #2
    SELECT tabelle1.* FROM tabelle1 WHERE tabelle1.id NOT IN (SELECT tabelle2.id FROM tabelle2)

    Zeigt dir alle Einträge aus Tabelle 1, die keinen entsprechenden ID-Eintrag in Tabelle 2 haben.
    Wenn die Anzeige dem gewünschten Ergebnis entspricht, kannst du das SELECT mit seiner WHERE-Bedingung in eine DELETE-Anweisung umschreiben.

    Edit: der 2. SQL war Mist.

    Kommentar


    • #3
      Cool

      Besten dank! ist ja ziemlich einfach!

      Kommentar


      • #4
        wenn dein MySQL-Server Subselects erlaubt

        Kommentar


        • #5
          macht er

          Kommentar


          • #6
            Shit, local funktioniert es, aber auf dem Webserver bekomme ich bei dem Subselect einen Fehler. Verdammt!

            Gibt es eine andere Möglichkeit ?

            Kommentar


            • #7
              dann schau mal in der Doku unter left join nach

              Kommentar


              • #8
                Versteh ich nicht so wirklich!

                Habe nun beide via left joint zusammengefügt, aber was bringt mir das ?

                "Select * form Tabelle1 as a inner join Tabelle2 as b on a.id=b.id"

                Damit habe ich doch nur die Einträge nebeneinandere zugeordnet!

                Kommentar


                • #9
                  Was ist die Besonderheit von LEFT JOIN gegenüber bspw INNER JOIN?
                  Wodurch zeichnen sich dann diejenigen Datensätze aus, die Du haben willst?
                  -> Wie muss die Abfrage aussehen?

                  Kommentar


                  • #10
                    Notfalls mit 2 Abfragen lösen.

                    SELECT id FROM tabelle2

                    Ergebnis zB 1, 2, 4

                    Ergebnisse die nicht in tabelle2 vorkommen:
                    SELECT * FROM tabelle1 WHERE id NOT IN (1, 2, 4)

                    Die Treffer aus dem 1. SELECT kannst du in einen Array schreiben und mittels implode(', ', $idList) wieder zusammensetzend in die runden Klammern des 2. SELECTs schreiben.


                    Hab gerade keinen MySQL Datenbank zur Hand, aber es könnte mit RIGHT JOIN gehen. Werde das heut nachmittag mal testen.

                    Kommentar


                    • #11
                      @Bruchpilot
                      left join gibt die 0 Werte der linken Tabelle mit aus, sodas man mit einer Where klausel aus is null diese rausfiltern kann, aber bei mir kommt da garnichts. Obwohl es welche gibt.

                      in Tabelle 1 sind Datensetzte mit Fremdschlüssel dem Primärschlüssel der Tabelle 2
                      ich will nun alle aus Tabelle 1 haben welchen Fremdschlüssel in Tabelle 2 nicht mehr existent sind!

                      Die Abfrage ? gute Frage

                      @Zergling
                      die 2 Abfragen zu schreiben und in PHP zu verbinden wäre einfach, will aber gerne eine Abfrage haben. muss ja irgentwie gehen

                      Kommentar


                      • #12
                        -> LEFT JOIN

                        Also: in Tabelle1 sind alle Schlüssel vorhanden und in Tabelle2 könnten welche fehlen
                        SELECT a.avis_id
                        FROM Tabelle1 AS a
                        LEFT JOIN Tabelle2 AS b
                        ON (a.avis_id = b.avis_id) AND b.avis_id IS NULL

                        in Tabelle2 sind alle Schlüssel vorhanden und in Tabelle1 könnten welche fehlen, dann einfach umdrehen
                        SELECT a.avis_id
                        FROM Tabelle2 AS a
                        LEFT JOIN Tabelle1 AS b
                        ON (a.avis_id = b.avis_id) AND b.avis_id IS NULL

                        Kommentar


                        • #13
                          Zitat von Cyberbob_at_tot
                          @Bruchpilot
                          left join gibt die 0 Werte der linken Tabelle mit aus, sodas man mit einer Where klausel aus is null diese rausfiltern kann, aber bei mir kommt da garnichts. Obwohl es welche gibt.
                          Was meinst Du mit 0 Werte?
                          Unklar formuliert, vermutlich falsch.

                          FROM a LEFT JOIN b
                          a, linke Tabelle, alle
                          b, rechte Tabelle, evtl NULL

                          Kommentar


                          • #14
                            @Bruchpilot
                            Werden Spalten aus der rechts stehenden Tabelle mit ausgegeben, so werden deren Werte,wenn nicht vorhanden, als NULL-Werte ausgegeben. In Kombination mit einer WHERE-Abfrage lassen sich diese dann ausfiltern:

                            Kommentar


                            • #15
                              @DiBo33
                              thx, das hat mich weitergebracht, so wie es scheint fehlten mir die Klammern

                              Funktioniert nun aber!

                              Kommentar

                              Lädt...
                              X