PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Abfrage


ESAD
2006-08-03, 18:37:29
Tabelle1: Messung_MSG
MSG_ID(PK)
Tabelle2: Auswertung_AWG
AWG_ID(PK)
MSG_ID(FK)
Tabelle3: Kabelberechnung_KBG
KBG_ID(PK)
AWG_ID(FK)

Hallo ich habe eine bitte die mir sehr wichtig ist ich weiß das es immer heißt selbst ist der mann und man würde so nix lernen usw. usw aber es ist wirklich wichtig. und zwar habe ich hier 3 tabellen in denen mehrere werte stehen wichtig sind hier aber die tabelle1 mit MSG_ID diesen wert weiß ich und über den umweg mit tabelle2(wo eine msg_id zu einer awg_id passt) soll ich die kbg_ID in tabelle3 ermitteln die zu dem erstgenannten msg_ID passen. ich habe stundenlang herumversucht mit joins usw. aber es kommt nix raus was "komplet" funktioniert immer nur bei einem teil der daten klapt es....

Brudertac
2006-08-03, 19:12:05
http://www.aspheute.com/artikel/20001023.htm

Damit du doch noch was lernst dabei :smile:

Gruss
Brudertac

P2oldi
2006-08-04, 09:06:53
ich nehme mal an, Du kannst Dir die zugehörige AWG_ID aus Tabelle 2 besorgen mittels eines Joins... oder hapert es da schon? Weil das dann um einen zweiten Join zu erweitern ist eigentlich kein Prob.

SELECT t2.awg_id
FROM tabelle2 t2, tabelle1 t1
WHERE t2.msg_id = t1.msg_id
AND t1.msg_id = <wert>;

das hier liefert Dir die zu einer vorhandenen msg_id gehörige awg_id, ist ja aber erst die halbe Miete. Um das gewünschte Ergebnis zu erreichen, erweitern wir das obige Statement einfach ein bissel:
SELECT t3.kbg_id //das wollen wir ja am Ende haben
FROM tabelle3 t3, tabelle2 t2, tabelle1 t1
WHERE t3.awg_ig = t2.awg_id //join von tabelle3 an tabelle2
AND t2.msg_id = t1.msg_id //join von tabelle2 an tabelle1
AND t1.msg_id = <wert>; //Beschränkung des Ergebnisses

alternativ geht auch:
SELECT t3.kbg_id
FROM tabelle3 t3
JOIN tabelle2 t2 ON t3.awg_id = t2.awg_id
JOIN tabelle1 t1 ON t2.msg_id = t1.msg_id
WHERE t1.msg_id = <wert>;

hoffe ich hab mich verständlich ausgedrückt, ansonsten einfach nochmal nachfragen :)

Gast
2006-08-04, 11:03:09
ich nehme mal an, Du kannst Dir die zugehörige AWG_ID aus Tabelle 2 besorgen mittels eines Joins... oder hapert es da schon? Weil das dann um einen zweiten Join zu erweitern ist eigentlich kein Prob.

SELECT t2.awg_id
FROM tabelle2 t2, tabelle1 t1
WHERE t2.msg_id = t1.msg_id
AND t1.msg_id = <wert>;

das hier liefert Dir die zu einer vorhandenen msg_id gehörige awg_id, ist ja aber erst die halbe Miete. Um das gewünschte Ergebnis zu erreichen, erweitern wir das obige Statement einfach ein bissel:
SELECT t3.kbg_id //das wollen wir ja am Ende haben
FROM tabelle3 t3, tabelle2 t2, tabelle1 t1
WHERE t3.awg_ig = t2.awg_id //join von tabelle3 an tabelle2
AND t2.msg_id = t1.msg_id //join von tabelle2 an tabelle1
AND t1.msg_id = <wert>; //Beschränkung des Ergebnisses

alternativ geht auch:
SELECT t3.kbg_id
FROM tabelle3 t3
JOIN tabelle2 t2 ON t3.awg_id = t2.awg_id
JOIN tabelle1 t1 ON t2.msg_id = t1.msg_id
WHERE t1.msg_id = <wert>;

hoffe ich hab mich verständlich ausgedrückt, ansonsten einfach nochmal nachfragen :)

Wobei Joins ja eigentlich Performence Killer sind und man lieber SubSelects oder andere Möglichkeiten wählt bei dennen keine Korrelation vorliegt.

TheGamer
2006-08-04, 11:09:00
Wobei Joins ja eigentlich Performence Killer sind und man lieber SubSelects oder andere Möglichkeiten wählt bei dennen keine Korrelation vorliegt.

Kommt draufan wie gut der Query Optimizer implementiert ist, muss ncihtmal langsamer als was anderes sein, Alles schon erlebt

ESAD
2006-08-04, 14:58:21
vielen dank! ich habs aber schon selber hinbekommen auf einmal hat es einfach geklappt... versteht wer will ^^