(Apache Server 5.0.41)
hallo zusammen,
habe ein problem, ist leider schwer zu erklären. ich versuchs mal:
habe folgende tabellen:
Tab1
Feld1, Feld2, Feld3
Tab2
Feld1, Feld2, Feld3
abfrage wie folgt:
SELECT Tab1.Feld1, Tab2.Feld2 FROM Tab1 LEFT JOIN Tab2 ON (Tab1.Feld1 = Tab2.Feld1) AND (Tab1.Feld2 = Tab2.Feld2) WHERE (Tab1.Feld1 = '12345') AND Tab2.Feld3 = '000009999');
das klappt auch, nur brauch ich eine vorabauswahl von Tab2, wo lediglich die datensätze einbezogen werden, wo Tab2.Feld3 = '000009999' und diese dann per LEFT JOIN in die abfrage integriert werden sollen.
heißt, wenn in Tab 2 nichts da ist, dann soll er trotzdem die werte aus Tab 1 bringen und die fehlenden DS aus Tab2 als null werte!
im access würde ich erst eine abfrage machen, wo ich die vorauswahl treffe, und diese dann die abfrage in diese abfrage einbringen würde.
hatte die abfrage wie folgt umgestellt, leider habe ich nach 10 min minen rechner neu gestartet, weil der nur noch am rechnen war...
SELECT Tab1.Feld1, Tab2.Feld2 FROM Tab1 LEFT JOIN Tab2 ON (Tab1.Feld1 = Tab2.Feld1) AND (Tab1.Feld2 = Tab2.Feld2) WHERE (Tab1.Feld1 = '12345') AND Tab2.Feld3 in (SELECT Tab2.Feld3 FROM Tab2 WHERE Tab2.Feld3= '000009999');
(Apache Server 5.0.41)
hallo zusammen,
habe ein problem, ist leider schwer zu erklären. ich versuchs mal:
habe folgende tabellen:
Tab1
Feld1, Feld2, Feld3
Tab2
Feld1, Feld2, Feld3
abfrage wie folgt:
SELECT Tab1.Feld1, Tab2.Feld2 FROM Tab1 LEFT JOIN Tab2 ON (Tab1.Feld1 = Tab2.Feld1) AND (Tab1.Feld2 = Tab2.Feld2) WHERE (Tab1.Feld1 = '12345') AND Tab2.Feld3 = '000009999');
thomas
Hallo Thomas und herzlich Willkommen im Forum!
Ich denke anstelle des LEFT JOIN sollte ein LEFT OUTER JOIN helfen.
habe auch das mit dem "left OUTER join" getestet, leider ging es nicht... ergebnis: kein Datensatz.
das problem liegt eindeutig in der problematik, das ich bei der where klausel für beide tabellen ein kriterium angeben muß!
also wähle aus Tab1 5 datensätzze aus, und verknüpfe diese mit 5 werten aus tab2 (wenn vorhanden)
es ist halt etwas problematisch...
im access würde ich eine abfrage machen für tab2, die ich dann in diesen sql string einbringen würde. nur das ist nicht access, und will ja auch was lernen :-)
könntest mich auf den richtigen pfad weisen? Danke
im access würde ich eine abfrage machen für tab2, die ich dann in diesen sql string einbringen würde. nur das ist nicht access, und will ja auch was lernen :-)
könntest mich auf den richtigen pfad weisen? Danke
thomas
Mach doch Abfragen in Access und diese sind im Prinzip 1:1 zu übernehmen.
Habe die letzten Jahre mehrere Acces-DB in eine Webausgabe gewandelt, in PHP, XHTML-Templates und MySql-DB.
Die SQL-Statments können doch über die Access-Eigenschaften des betreffenden Feldes ausgelesen werden!
Anfänglich habe ich somit viele Anforderungen gelöst, schon alleine weil da eben per grafischen Elementen die Tabellen, im Prinzip per Mausklick, verknüpft werden können.
Dies grafische Zusammenhänge werden durch Access in ein sql-Statement gebracht und schon ergibt sich ein "lerning per doing".
Nur so ein Vorschlag!
Grüße, Franzx
__________________
Für die richtige Frage gibt's die richtige Antwort!
so hab ich auch angefangen, und bei schwierigen abfragen, mach ich das nach wie vor so!
leider gibt es kein abschreiben, wenn man in die Abfrage unterabfragen einbaut... das sprengt die logik, zumindest meine... :-(
Ok, wie sieht es aus, kannst Du ein PAP oder Schaubild zeigen?
Wie hängen die Tabellen zusammen, an welchen Stellen und welche Informationen sollen aus welchen Tabellen genommen werden.
Mit einer Beschreibung, die auch noch ineinander verschachtelt ist, kann ich nichts anfangen.
Ein PAP ist übersichtlicher und zeigt die Zusammenhänge.
Grüße, Franzx
__________________
Für die richtige Frage gibt's die richtige Antwort!
bild kann ich leider nicht, aber ich mach es verständlich:
in Tab1 sind folgende felder enthalten (auf das wichtigste reduziert):
Tab1->Bestelldaten:
Datum, KdNr, EAN5, WZ(Warenzustand 1A, 1B), Menge, BestellNr, PosNr
Tab2->Stammdaten:
PricatNr, Ean5,WZ, EK,VK
in Tab1 suche ich alles Datensätze zu Bestellnummer 12345
das wäre ja "SELECT .... FROM Tab1 WHERE BestellNr = 12345;"
in Tab2 suche ich die Stammdatensätze (Einkaufspreis, Verkaufspreis) zu dem Kunden, anhand der Pricatnummer die der kundenummer zugeordnet ist, in dem Fall "00000099999"
das wäre ja "SELECT .... FROM Tab2 WHERE Pricat = '0000099999';"
diese beiden tabelle sind mit den felder EAN5 und WZ verknüpft:
"... FROM Tab1 LEFT JOIN Tab2 ON (Tab1.Ean5 = Tab2.Ean5) AND (Tab1.WZ = Tab2.WZ)...
wenn also preise für den artikel (EAN5, wZ, zum Kunden XYZ) fehlen, dann sollen dort leere felder kommen, damit ersichtlich ist, das man handlungsbedarf hat, sprich: preise anlegen.
deshalb kam ich als aller erstes im wie eröffnungthread geschrieben auf folgende idee:
SELECT Tab1.EAN5, Tab2.VK FROM Tab1 LEFT JOIN Tab2 ON (Tab1.EAN5 = Tab2.EAN5) AND (Tab1.WZ = Tab2.WZ) WHERE (Tab1.BestellNr = '12345') AND Tab2.Pricat = '000009999');
ich habe dazu meine 2 abfragen nochmal als jpg hochgeladen!
Hmmm,
Tab1->Bestelldaten:
Datum, KdNr, EAN5, WZ(Warenzustand 1A, 1B), Menge, BestellNr, PosNr
Tab2->Stammdaten: PricatNr, Ean5,WZ, EK,VK
Will nur mal festhalten:
Also, der Beschreibung nach gibt es 2Tabellen, siehe entsprechende Felder. Die PricatNr = KdNr, oder wie soll sonst zugeordnet sein?
PHP-Code:
SELECT * FROM TAB2 INNER JOIN TAB1 ON TAB2.PricatNr = TAB1.KdNr WHERE BestellNr = 12345
In diesem FALL würden alle Datensätze ausgegeben werden, die mit diesem Kunden zusammen hängen, ob mit leeren Feldern oder nicht, sofern vorher selectiert.
Sollen nur Datensätze ausgegeben werden, mit diesen leeren Feldern, so würde in der WHERE-Bedingung eben noch folgen
PHP-Code:
... WHERE BestellNr = 12345 AND EK is null or VK is null ..
Zur Verknüpfung von 2 Tabellen, und laut Beschreibung sind es nur 2 Tabellen, reicht jeweils ein eindeutiges Feld. Das eindeutige Feld ist jeweils offenbar die KdNr und PricatNr.
Grüße, Franzx
__________________
Für die richtige Frage gibt's die richtige Antwort!
die zu verknüpfenden felder waren unterschiedlich, sprich... in Tab 1 stand der Wert "1A", der in Tab 2 auch stand, allerdings hab ich mir mit Length(fl) mal die längen der beiden felder anzeigen lassen, und sieeh da, der eine hatte länge 2 (is ja auch normal) und der andere 3... sprich da war irgendwo ein sonderzeichen versteckt, dr anscheinnd durch den import von access mitgekommen ist.