MYSQL: Join
Ben
- datenbank
0 Vinzenz Mai0 Ben0 Vinzenz Mai0 Ilja
Hallo zusammen
Ich habe ein Problem mit eine Abfrage und das müsste sich eigentlich mit einem JOIN-Statement lösen lassen. Jedoch bin ich aus der MYSQL-Doku nicht so ganz schlau geworden. Also, ich habe 2 Tables:
Table 1:
id |ca_id
---------------
1 |2
2 |2
3 |2
4 |3
Table 2:
old_id |ca_id
---------------
2 |2
7 |3
Ich möchte nun alle Einträge aus Table 1 haben, welche ca_id=2 haben und nicht in Table2 drin sind. Genauer:
-Aus Table 1 alle Einträge mit ca_id=2
-Aus Table 2 alle Einträge mit ca_id=2
-Diese 2 "Mengen" dann verbinden und am Schluss möchte ich nur noch die Resultate aus 1, welche nicht in 2 enthalten sind wobei table1.id table2.old_id entspricht.
In diesem Falle also die Einträge mit table1.id=1 und table1.id=3
Ich hoffe, ich konnte mich verständlich ausdrücken und jemand kann mir helfen bei dieser Abfrage.
Schonmal danke für eure Hilfe!
Gruss Ben
Hallo Ben,
für Dein Problem gibt es mindestens zwei Lösungsansätze:
- mit einem OUTER JOIN (sollte mit jeder MySQL-Version gehen)
- mit Subselects (erfordert MySQL 4.1.x oder neuer)
Table 1:
id |ca_id
1 |2
2 |2
3 |2
4 |3Table 2:
old_id |ca_id
2 |2
7 |3
Ich möchte nun alle Einträge aus Table 1 haben, welche ca_id=2 haben und nicht in Table2 drin sind. Genauer:
In diesem Falle also die Einträge mit table1.id=1 und table1.id=3
Lösung mit OUTER JOIN:
1. Lass Dir alle Einträge aus Table 1 anzeigen mit der
Entsprechung in Table 2, auch dann wenn es keine Entsprechung gibt:
LEFT OUTER JOIN
2. Schränke die Zielmenge auf die von Dir gewünschten Datensätze ein,
diese Datensätze haben in table2.ca_id den speziellen Wert NULL, auf
den Du mit IS NULL
prüfen kannst.
Zwei Lesetipps zu Joins:
Einführung Joins
Fortgeschrittene Joins
Freundliche Grüße
Vinzenz
Hallo Vinzenz
Ich möchte es schon gerne mit OUTER JOIN machen. Dann wäre es ungefähr so:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.old_id WHERE table2.ca_id IS NULL
Aber wo definiere ich jetzt, dass ich in beiden tables nur Einträge mit cat_id=2 auslesen möchte?
Ich weiss, ich weiss, hier werden keine Lösungen präsentiert, sondern nur Lösungsansätze, aber könntest du mir nicht doch ein Statement posten? :-)
Falls nicht wäre ich froh, wenn du mir die Links nochmals postest, die funktionieren nicht und bei SELFHTML Aktuell finde ich die Artikel nicht.
Danke und Gruss
Ben
Hallo Ben,
Ich möchte es schon gerne mit OUTER JOIN machen. Dann wäre es ungefähr so:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.old_id WHERE table2.ca_id IS NULL
Nach Deiner Darstellung sind die beiden Tabellen in diesem Fall über die Spalte ca_id (beider Tabellen) verknüpft.
Aber wo definiere ich jetzt, dass ich in beiden tables nur Einträge mit cat_id=2 auslesen möchte?
Ergänze die WHERE-Klausel durch eine weitere Bedingungen. Beide müssen erfüllt sein, d.h. die logische Verknüpfung ist AND.
Falls nicht wäre ich froh, wenn du mir die Links nochmals postest, die funktionieren nicht und bei SELFHTML Aktuell finde ich die Artikel nicht.
Grr, Links sollte man in der Vorschau testen:
Einführung joins
Fortgeschrittene joins
Freundliche Grüße
Vinzenz
yo,
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.old_id WHERE table2.ca_id IS NULL
Nach Deiner Darstellung sind die beiden Tabellen in diesem Fall über die Spalte ca_id (beider Tabellen) verknüpft.
für mich sieht es eher so aus, dass die beiden tabellen über id und old_id verbunden sind.
Ilja