Select mit direkter Konstanteneingabe mehrzeilig
-
Hi Hustbaer,
das hatte ich auch schon versucht, aber das klappt eben so nur einzeilig.
Bei mehrzeiligen Sachen wills immer ne Tabelle. Aber ich hatte ja gerade darauf gehofft, den Tabellenzugriff irgendwie weg zu "optimieren".
Die Access-DB-Engine hat eben irgendwo doch ein wenig ihre Grenzen.
Trotzdem vielen Dank.Gruß Mümmel
-
Hallo,
JET verlangt leider nach einem FROM. Was versucht du denn zu machen?
Wenn du dich in deiner Abfrage auf eine Tabelle beziehst, dann kannst du diese auch einfach an deine UNIONs hängen ohne dich auf eine vorhandene Spalte beziehen zu müssen.Grüße
-
@PREIST
Meinst duselect 1 as Ziffer, 'eins' as Ziffernstring FROM IrgendEineTabelle UNION ALL select 2, 'zwei' FROM IrgendEineTabelle UNION ALL select 3, 'drei' FROM IrgendEineTabelle
?
Das wäre dann so pervers dass es schon wieder cool wäre.
Ich würde mir dafür dann aber ne Dummy-Tabelle mit nem schön sprechenden Namen machen wo nie Zeilen drinnen sind.
-
Hi Hustbaer
hustbaer schrieb:
@PREIST
Meinst duselect 1 as Ziffer, 'eins' as Ziffernstring FROM IrgendEineTabelle UNION ALL select 2, 'zwei' FROM IrgendEineTabelle UNION ALL select 3, 'drei' FROM IrgendEineTabelle
?
Das wäre dann so pervers dass es schon wieder cool wäre.
Ich würde mir dafür dann aber ne Dummy-Tabelle mit nem schön sprechenden Namen machen wo nie Zeilen drinnen sind.Ganz so ginge es nicht, da dann für jede Zeile der Tabelle ein Datensatz angelegt würde, es sei denne, man sichert ab, dass wirklich nur eine Zeile in der Tabelle steht oder verwendet einen anderen Weg.
Denkbar währe hier z.B.select top 1 1 as Ziffer, 'eins' as Ziffernstring FROM IrgendEineTabelle UNION ALL select top 1 2, 'zwei' FROM IrgendEineTabelle UNION ALL select top 1 3, 'drei' FROM IrgendEineTabelle
oder
select Max(1) as Ziffer, Max('eins') as Ziffernstring FROM IrgendEineTabelle UNION ALL select Max(2), Max('zwei') FROM IrgendEineTabelle UNION ALL select Max(3), Max('drei') FROM IrgendEineTabelle
leider eliminiert mir das nicht wie eigentlich gewollt den direkten Tabellenzugriff.
Werd ich wohl damit leben müssen, bleibt nur ebentuell noch ein entsprechend vorgefülltes TClientdataset. Aber ich glaube, da werfe ich mit der Wurst nach dem Schinken.Gruß Mümmel
-
hustbaer schrieb:
@PREIST
Meinst du
..yep :p,
oder schaut euch diesen Link an (DUAL):
http://stackoverflow.com/questions/7933518/table-less-union-query-in-ms-access-jet-ace... aber ganz ohne ist mir nicht bekannt das es geht.
Ich umgehe Access soweit es nur geht ;)!
-
Hi PRIEST,
Danke für den Klaps auf den Hinterkopf, manchmal ist man einfach betriebsblind, und übersieht beim Kopieren, das da ja union all steht.
Ja, ohne all, nur mit union geht es.Die kleinen mdb-Datenbanken sind, soweit man sich auf die reine Datenbank beschränkt und auf Access an sich verzichtet gar nicht so schlecht.
Wenn man über Jet und Ado zugreift, kommt man damit schon ganz gut zurecht.
Klar, mit einem großen DB-System kommen sie nicht mit, und Multiuser sollte möglichst auch nicht. Aber sie stehen unter jedem Windows ab XP zur Verfügung, ohne dass Access vorhanden sein muss, und was das wichtigste für mich ist, man muss wirklich nichts dafür installieren.
Und man hat den riesigen Vorteil,, dass man bei Bedarf über Access ein Reparatur und Wartungstool hat, mit dem man auch jede einzelne Tabelle und innerhalb der Tabellen jedes einzelne Feld problemlos mit einem Kommentar versehen kann.
Wenn man darauf angewiesen ist, dass man das Programm einfach samt mdb nur irgendwohin kopieren muss und es dann beim schlimmsten Dau funktionieren muss, dann hilft das schon recht gut weiter.
Irgendwohin kopieren ist meist bei vielen Nutzern das einzige, was man erwarten kann (meist ist irgendwohin dann im Endeffekt der Desktop auch wenn man ein anderes Ziel angegeben hat) und wenn es dann funktioniert, dann ist es erst mal ok.Gruß Mümmel
-
Hehe, cool wenn es jetzt klappt
Union frisst ja quasi die Duplikate weg, wenn es zuviel Daten sind, dann musst du mal die performance testen, nicht das es hier Einbußen gibt.
Und ja, da hast du schon recht ganz teuflisch ist das nicht
-
Hi PRIEST,
ja, es geht gut. Um unnötigen Overhead zu vermeiden hab ich dafür eine extra-Dummy-Tabelle angelegt, die nur eine Spalte mit einem SmallInt-Wert enthält.
Kurioserweise ist das Ergebnis gleich, egal wie viele Zeilen die Tabelle enthält. Ist sie dagegen völlig leer, erhält man auch eine leere Ergebnismenge, auch wenn man gar keinen Bezug auf die Zeilenzahl nimmt.
Vielleicht kann man das ja ggf. auch noch für irgendwelche Steuerzwecke verwenden.
Dadurch dass ich da nur eine einzige Dummy-Tabelle verwende, hält sich auch der Aufwand in der Datenbank in Grenzen, und ich gehe davon aus, das das der optimale Weg unter Jet-SQL ist.
Ich hatte eben gehofft, das man wie bei Transakt-SQL mehrzeilege Angaben machen kann, wo z.B. solche Syntax (hier bei insert) machbar ist:INSERT INTO Production.UnitMeasure VALUES (N'FT2', N'Square Feet ', '20080923'), (N'Y', N'Yards', '20080923'), (N'Y3', N'Cubic Yards', '20080923');
Gruß Mümmel
-
Ja, schön wäre es wenn das möglich wäre!
Falls jemand diesen Beitrag liest und nicht weiß wo der Unterschied zwischen UNION und UNION ALL ist.
UNION ALL gibt alle werte einer Tabelle zurück, auch Duplikate.
UNION filter Duplikate heraus, quasi wie ein SELECT DISTINCT.(Tabelle1 hat 3 Einträge.)
SELECT "Value" as Field1 FROM Tabelle1; UNION SELECT "Value2" as Field1 FROM Tabelle1;
Output 2 Rows; "Value" + "Value2"
gibt das selbe aus wie
SELECT DISTINCT "Value" as Field1 FROM Tabelle1; UNION ALL SELECT DISTINCT "Value2" as Field1 FROM Tabelle1;
Output 2 Rows; "Value" + "Value2"
SELECT "Value" as Field1 FROM Tabelle1; UNION ALL SELECT "Value2" as Field1 FROM Tabelle1;
Output 6 Rows; 3x "Value" + 3x "Value2"
-
Wichtig:
Der Output von`SELECT DISTINCT ...
UNION ALL
SELECT DISTINCT ...`
ist hier nur deswegen identisch zum Output von
`SELECT ...
UNION
SELECT ...`
weil die Ergebnisse der beiden
SELECT
s sich nicht überschneiden.UNION
(ohne ALL) ist generell eher vergleichbar mit`SELECT DISTINCT * FROM
(
SELECT ... UNION ALL SELECT ...
)`
-
@hustbaer Naja... eher ein SQL-Schluckauf dein "Generell"
Der Vergleich auf das genannte Beispiel passt doch...
-
Ich kann den Sinn hinter deinem Kommentar nicht erkennen.
-
Gehupft wie gesprungen
Um den Unterschied zu erklären habe ich es lieber aufgedröselt.
Aber Ergänzungen sind immer gut.Greetings