SQL in 2 Tabellen abfragen

js-mueller

Erfahrenes Mitglied
Hi

ich habe 2 tabellen. Und zwar einmal die tabelle berichte und einmal die Tabelle kategorie.
Jetzt gibt es in der tabelle Berichte eine Spalte kidn. Dort ist ein Int gespeichert welcher die Kategorie angibt. Nun möchte ich anhand der Zahl den namen der Kategorie aus der Tabelle kategorie auslesen.
Sprich:

berichte.kidn -> kategorie.idn = kategorie.name

Kann mir da wer helfen?
 
Hallo,
müßte eigentlich so aussehen:

Select name from kategorie, berichte where kategorie.idn = berichte.kidn

Mfg

Edit: oder mit nem Join:

SELECT name
FROM kategorie INNER JOIN
berichte ON kategorie.idn=berichte.kidn
where kategorie.idn=berichte.kidn

gegebenfalls noch ein Group By einbauen
 
Zuletzt bearbeitet:
Ahso sorry ich hab noch vergessen zu sagen das ich den rest aus der Tabelle berichte auch noch ausgelesen haben möchte (thema, bericht,datum)
 
Hi, danke das funktioniert super, aber ich hab paar verständniss fragen dazu, damit ichs nächstes mal alleine hinbekomme.

1. Also wieso brauch ich dafür kein JOIN? In meinem Buch hatte ich gelesen das man für 2 Tabellen nen JOIN brauch.
2. where kategorie.idn=berichte.kidn; Er ließt aus der berichte Tabelle alles aus, weil sich WHERE nur auf die kategorie Tabelle bezieht oder? Mit nem AND könnt ich noch einschränkungen bei berichte machen oder?

Danke schonma für die schnellen antworten gestern.
 
Sry, mußt meinen Rechner am Wochenende plätten und dann alles wieder neu drauf hauen...

Kleine Erklärung zu 2:
Select kategorie.name, berichte.* selektiere alle Spalten (wegen dem *) der Tabelle 'berichte' und die Spalte 'name' der Tabelle 'kategorie'

from kategorie, berichte von den Tabellen 'kategorie' und 'berichte' -- wird auch für die where klausel benötigt

where kategorie.idn = berichte.kidn führe den angegebenen Select aus wo/wenn der Wert der Spalte 'idn' der Tabelle 'kategorie' = (gleich) dem Wert der Spalte 'kidn' der Tabelle 'berichte' ist.
Mit einem AND könntest du weitere Beschränkungen vornehmen.


Zu 1:
Also mit nem JOIN geht es auch, aber da es sich hier nur um 2 Tabellen und einer relativ einfache Bedingung handelt ist die andere Form auch möglich, weil überschaubar.

Ich hab einige Abfragen die sich durch 4-5 Tabellen mit je unterschiedlichen Bedingungen hangeln, da ist ein JOIN unumgänglich!


Wenn noch was offen is, dann einfach fragen.
Mfg :)
 
Ich war immer der Meinung, dass es sich in beiden Faellen um nen Join handelt. Das ist doch nur Kosmetik ob man die Abfrage mit


SELECT ..FROM
tabelle1 JOIN tablelle2
ON tabelle1.irgendwas = tabelle2.irgendwas

oder mit

SELECT .... FROM
tabelle1,tabelle2
WHERE tabelle1.irgendwas = tabelle2.irgendwas


macht.

Oder liege ich falsch?
Das Ergebnis ist das gleiche.

Gruß
Frank

PS: Natuerlich nur, wenn man nicht Formulierungen wie left outer join usw braucht !
 
Japp, ansich sind beides Joins, nur bei dem einen wird es nicht extra geschrieben (, weil halt auf INNER, OUTER, LEFT verzichtet wird)...

join = verbindung
 
Hallo,

nachteil der Abfrage ist, man bekommt nur Datensätze angezeigt zu denen auch Kategorienamen vorhanden sind. So würden z.B. Fehlende Kategorienamen nicht auffallen. Ich würde ein LEFT OUTER JOIN nutzen. Solang alle Kategorienamen vorhanden sind ist das Ergebnis identisch, fehlende Fallen dann aber sofort auf.

Gruß

PeterE
 

Neue Beiträge

Zurück