Access XP - UNION nach MySQL

Hallo,

ich will in Access XP Abfragen auf eine MySQL-Datenbank erstellen, u.a. auch UNIONs.

Access kann ja UNION verarbeiten, MySQL (3.23) dagegen nicht.

Wenn ich nun eine UNION auf die per ODBC verknüpften Tabellen mache, schickt Access den SQL-String an MySQL, was natürlich mit einer Fehlermeldung endet.

Das passiert auch, wenn ich die einzelnen SELECTs erst als Abfragen definiere und dann eine UNION auf diese Abfragen mache - Access scheint das zu „optimieren“.

Wie kann ich Access dazu zwingen, die UNION-Abfrage selbst zu verarbeiten?

Danke

Stefan

ich will in Access XP Abfragen auf eine MySQL-Datenbank
erstellen, u.a. auch UNIONs.

Hallo Stefan,

binde die SQL - Datenbank doch einfach in Dein Access-Programm ein. Dann kannst Du alles machen was Du möchtest.

Gruß
Wolfgang

binde die SQL - Datenbank doch einfach in Dein Access-Programm
ein. Dann kannst Du alles machen was Du möchtest.

Du meinst, alle Tabellen statt in MySQL in Access aufbauen?
Könnte etwas schwierig werden, es handelt sich hier um eine webbasierte Applikation mit MySQL-Backend, die ich lediglich mit Access auswerten will - das aber dynamisch.

Bleibt wohl nur der Weg über temporäre Tabellen, den ich mittlerweile gegangen bin.

Danke trotzdem für Deine Antwort.

Stefan

Hallo Stefan,

nein, nicht die Tabellen noch mal in Access aufbauen, nur EINBINDEN ( dynamisch verknüpfen), nicht importieren!

Gruß
Wolfgang

Du meinst, alle Tabellen statt in MySQL in Access aufbauen?
Könnte etwas schwierig werden, es handelt sich hier um eine
webbasierte Applikation mit MySQL-Backend, die ich lediglich
mit Access auswerten will - das aber dynamisch.

Bleibt wohl nur der Weg über temporäre Tabellen, den ich
mittlerweile gegangen bin.

Danke trotzdem für Deine Antwort.

Stefan

nein, nicht die Tabellen noch mal in Access aufbauen, nur
EINBINDEN ( dynamisch verknüpfen), nicht importieren!

Das hatte ich getan: alle MySQL-Tabellen sind per ODBC verknüpft (sprich: Rechtsklick -> Tabellen verknüpfen). Trotzdem werden Abfragen darauf offenbar wie Passthrough behandelt.

Stefan

Das hatte ich getan: alle MySQL-Tabellen sind per ODBC
verknüpft (sprich: Rechtsklick -> Tabellen verknüpfen).
Trotzdem werden Abfragen darauf offenbar wie Passthrough
behandelt.

Ja, das ist aber abhängig von Deinen Abfragen. Wie sieht denn z.B. der SQL - String der Abfragen aus ?

Gruß
Wolfgang

Ja, das ist aber abhängig von Deinen Abfragen. Wie sieht denn
z.B. der SQL - String der Abfragen aus ?

Im einfachsten nicht funktionierenden Fall habe ich folgende Struktur:

  • Abfrage „qsel1“:
    SELECT id, „Wert1“ AS feld1, feld2, feld3 FROM tabelle1 WHERE feld2>=1;

  • Abfrage „qsel2“:
    SELECT id, „Wert2“ AS feld1, feld4, feld3 FROM tabelle1 WHERE feld4>=1;

  • Union „quni“ dazu:
    (SELECT * FROM qsel1) UNION (SELECT * FROM qsel2)

tabelle1 ist eine per ODBC verknüpfte MySQL-Tabelle.
qsel1 und qsel2 laufen problemlos, quni liefert den MySQL-Fehler.

Das gleiche passiert, wenn ich die SELECTs aus qsel1/qsel2 direkt in quni einsetze.

Es ist auch egal, ob ich in quni die Feldnamen explizit angebe oder/und die Felder in qsel1/qsel2 identisch benenne (ich weiß, dass das normalerweise klar ist, aber man hat schon Pferde k…n sehen :wink:

Das ganze dient der Normalisierung der Tabelle. Natürlich wäre es besser, die Tabelle gleich richtig zu strukturieren, aber darauf habe ich leider keinen Einfluss.

Stefan

  • Abfrage „qsel1“:
    SELECT id, „Wert1“ AS feld1, feld2, feld3 FROM tabelle1 WHERE
    feld2>=1;

  • Abfrage „qsel2“:
    SELECT id, „Wert2“ AS feld1, feld4, feld3 FROM tabelle1 WHERE
    feld4>=1;

Beide Abfragen greifen auf die selbe Tabelle zu? ist das OK?
Gibt es das Feld „Feld1“ auch in der Tabelle?

  • Union „quni“ dazu:
    (SELECT * FROM qsel1) UNION (SELECT * FROM qsel2)

tabelle1 ist eine per ODBC verknüpfte MySQL-Tabelle.
qsel1 und qsel2 laufen problemlos, quni liefert den
MySQL-Fehler.

Das gleiche passiert, wenn ich die SELECTs aus qsel1/qsel2
direkt in quni einsetze.

Es ist auch egal, ob ich in quni die Feldnamen explizit angebe
oder/und die Felder in qsel1/qsel2 identisch benenne (ich
weiß, dass das normalerweise klar ist, aber man hat schon
Pferde k…n sehen :wink:

Antwort der Access Hilfe bei „union“ als Suchbegriff:
Jede SELECT-Anweisung muss die gleiche Anzahl von Feldern zurückgeben, und zwar in identischer Reihenfolge. Die Datentypen der zusammengehörenden Felder müssen kompatibel sein, mit einer Ausnahme: Sie können ein Zahlen- und ein Textfeld als einander entsprechende Felder verwenden.

Also sollte es so sein:

  • Abfrage „qsel1“:
    SELECT id, „Wert1“ AS feld1, feld2, feld3, feld4 FROM tabelle1 WHERE
    feld2>=1;

  • Abfrage „qsel2“:
    SELECT id, „Wert2“ AS feld1, feld2, feld3, Feld4 FROM tabelle1 WHERE
    feld4>=1;

Das ganze dient der Normalisierung der Tabelle.

oder wolltest Du das erreichen :

SELECT tabelle1.ID, IIf([Feld2]>=1,„WERT1“,„LEER“) Or IIf([FELD4]>=1,„WERT2“,„LEER“) AS feld1, tabelle1.Feld2, tabelle1.Feld3, tabelle1.Feld4
FROM tabelle1;

Natürlich wäre es besser, die Tabelle gleich richtig zu strukturieren, aber darauf habe ich leider keinen Einfluss.

das kenne ich und kann es verstehen :smile:

Gruß
Wolfgang

Beide Abfragen greifen auf die selbe Tabelle zu? ist das OK?

Ja, es geht ja drum, Spalten zu Zeilen zu machen.

Gibt es das Feld „Feld1“ auch in der Tabelle?

nein

Also sollte es so sein:

  • Abfrage „qsel1“:
    SELECT id, „Wert1“ AS feld1, feld2, feld3, feld4 FROM tabelle1
    WHERE
    feld2>=1;

  • Abfrage „qsel2“:
    SELECT id, „Wert2“ AS feld1, feld2, feld3, Feld4 FROM tabelle1
    WHERE
    feld4>=1;

Wieso? Beide SELECTs entsprechen vollständig den von Dir genannten Bedingungen (auch was die Datentypen angeht).

oder wolltest Du das erreichen :

SELECT tabelle1.ID, IIf([Feld2]>=1,„WERT1“,„LEER“) Or
IIf([FELD4]>=1,„WERT2“,„LEER“) AS feld1, tabelle1.Feld2,
tabelle1.Feld3, tabelle1.Feld4
FROM tabelle1;

Nein, ich will ja gerade feld2 und feld4 in einer Spalte untereinander haben („Normalisierung“, sic!)

Stefan