Tabellen vergleichen
Dirk
- datenbank
Hallo liebes Forum,
ich habe mir schon einen Ast abgesucht und auch schon viel probiert.
Zu meinem Problem:
Ich habe zwei Tabellen. Beide besitzen ein ID Feld. Normalerweise dürfen in beiden Tabellen nur verknüpfte Werte enthalten sein. Also wenn es in einer Tabelle die Id 100 gibt (aut_increment), dann gibt es diese auch in der anderen (nicht auto_increment). Nun sind aber in einer Tabelle einige einträge enthalten mit einer ID, die es in der anderen nicht gibt.
Wie kann ich nun über eine PHP Abfrage (select) die Datensätze finden die nur in einer Tabelle vorhanden sind, damit ich diese löschen kann?
Das hier funktioniert nicht:
SELECT products_id from products AS p1, products_to_categories AS p2 where p1.products_id != p2.products_id
Gruß
Dirk
ich habe mir schon einen Ast abgesucht und auch schon viel probiert.
auch im MySQL-Handbuch?
Wie kann ich nun über eine PHP Abfrage (select) die Datensätze finden die nur in einer Tabelle vorhanden sind, damit ich diese löschen kann?
http://dev.mysql.com/doc/mysql/de/join.html
Abschnitt "Wenn es für die rechte Tabelle keinen übereinstimmenden Datensatz ...."
Hallo Dirk,
Ich habe zwei Tabellen. Beide besitzen ein ID Feld. Normalerweise dürfen in beiden Tabellen nur verknüpfte Werte enthalten sein. Also wenn es in einer Tabelle die Id 100 gibt (aut_increment), dann gibt es diese auch in der anderen (nicht auto_increment). Nun sind aber in einer Tabelle einige einträge enthalten mit einer ID, die es in der anderen nicht gibt.
Wie kann ich nun über eine PHP Abfrage (select) die Datensätze finden die nur in einer Tabelle vorhanden sind, damit ich diese löschen kann?
Sorry, aber PHP hat mit SQL zunächst einmal überhaupt nichts zu tun.
Das hier funktioniert nicht:
SELECT products_id from products AS p1, products_to_categories AS p2 where p1.products_id != p2.products_id
Dieses SELECT-Statement dürfte wirklich nicht das von Dir gewünschte Resultat zurückliefern.
Wenn ich Dich richtig verstehe möchtest Du die IDs (product_id) in der Tabelle product_to_categories finden, für die keine Entsprechungen in der Tabelle products existieren. Habe ich das richtig interpretiert?
Wenn ja, so kann Dir der OUTER JOIN helfen:
SELECT
pc.products_id,
p.products_id
FROM products_to_categories AS pc
LEFT OUTER JOIN products AS p
ON pc.products_id = p.products_id
ist der erste Ansatz.
Nun musst Du nur noch mit der WHERE-Klausel Deine gewünschten Datensätze ausfiltern. Das sind übrigens diejenigen, bei denen p.products_id den Wert NULL enthält.
Die WHERE-Klausel überlasse ich Dir als Übung.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
Danke für deine Hilfe.
Habe nun folgende Lösung gefunden:
select products.* from products LEFT JOIN products_to_categories ON products.products_id=products_to_categories.products_id where products_to_categories.products_id is NULL
Klappt super :--)
An den OUTER JOIN Befehlen habe ich mich bisher noch nicht so ran gemacht. Aber eigendlich einfach, wenn man es erstmal begriffen hat.
Danke!
Sorry, aber PHP hat mit SQL zunächst einmal überhaupt nichts zu tun.
Ansonsten wird wohl jeder wissen was ich damit meine. Natürlich über ein PHP Programm das auf eine MySql Datenbank zugreift *tztz*
Trotzdem, hast mir wirklich geholfen. Danke