SQL, doppelte Elemente
Hannes
- datenbank
Hallo hallo!
Folgende Abfrage gibt mir nur die Elemente aus die mehr als einmal vorkommen.
[code lang=sql]
SELECT DISTINCT StaNutzer.NUTZER
FROM StaNutzer
WHERE (((StaNutzer.NUTZER)
In (select StaNutzer.NUTZER
from StaNutzer
group by StaNutzer.NUTZER
having count(*) > 1
)));
[code]
Wenn ich aber als Spaltenname nun z.B. NUTZER-NEU eingebe, kommt access damit nicht klar. Wie kann ich die Spalte NUTZER-NEU nach der obigen Form abfragen?
Hannes
Hallo Hannes,
Wenn ich aber als Spaltenname nun z.B. NUTZER-NEU eingebe, kommt access damit nicht klar. Wie kann ich die Spalte NUTZER-NEU nach der obigen Form abfragen?
das Minuszeichen ist in allen SQL-Dialekten ein Zeichen, das in Bezeichnern nicht einfach so verwendet werden darf. Will man solche Zeichen unbedingt in Bezeichnern wie Spaltennamen, Tabellennamen oder ähnlichem verwenden, so muss man diesen Bezeichner maskieren. Jet-SQL verwendet dazu eckige Klammern:
[NUTZER-NEU]
Großbuchstaben für Bezeichner zu verwenden, halte ich übrigens für keine besonders gute Idee. Alle SQL-Schlüsselwörter groß zu schreiben hingegen schon.
Freundliche Grüße
Vinzenz
[NUTZER-NEU]
Danke für deine antwort.
Allerdings gibt mir access dann 'ne Eingabemaske und will Parameterwerte haben ???
Hallo Hannes,
[NUTZER-NEU]
Danke für deine antwort.
Allerdings gibt mir access dann 'ne Eingabemaske und will Parameterwerte haben?
wie sieht Deine Abfrage aus, die zu diesem Verhalten führt?
Freundliche Grüße
Vinzenz
wie sieht Deine Abfrage aus, die zu diesem Verhalten führt?
SELECT DISTINCT StaNutzer.[NUTZER-NEU]
FROM StaNutzer
WHERE (((StaNutzer.[NUTZER-NEU]) In (select StaNutzer.[NUTZER-NEU]
from StaNutzer
group by StaNutzer.[NUTZER-NEU]
having count(*) > 1
)));
Nur mal so nebenbei
SELECT DISTINCT StaNutzer.[NUTZER-NEU]
FROM StaNutzer
group by StaNutzer.[NUTZER-NEU]
having count(*) > 1
sollte das gleiche Ergebnis liefern wie Deine Abfrage
SELECT DISTINCT StaNutzer.[NUTZER-NEU]
FROM StaNutzer
WHERE (((StaNutzer.[NUTZER-NEU]) In (select StaNutzer.[NUTZER-NEU]
from StaNutzer
group by StaNutzer.[NUTZER-NEU]
having count(*) > 1
Hallo,
ergänzend:
SELECT DISTINCT StaNutzer.[NUTZER-NEU]
FROM StaNutzer
group by StaNutzer.[NUTZER-NEU]
having count(*) > 1
kann man sinnvollerweise noch um das überflüssige Schlüsselwort DISTINCT reduzieren. Bei Gruppierung wird jeder unterschiedliche Eintrag genau einmal aufgeführt. Somit haben wir:
~~~sql
SELECT
StaNutzer.[NUTZER-NEU]
FROM
StaNutzer
GROUP BY
StaNutzer.[NUTZER-NEU]
HAVING
COUNT(*) > 1;
Das funktioniert übrigens in Access 2007 bestens. Nach meinem Kenntnisstand hat sich der unterstützte SQL-Umfang in diesem Bereich seit Access 2.0 nicht verändert, sollte von der von Hannes verwendeten Access-Version gehen. Jet-SQL unterscheidet bei Spaltennamen nicht zwischen Groß- und Kleinschreibung.
Freundliche Grüße
Vinzenz
Danke an Alle.
Hab die Spalten jetzt mit Unterstrich statt mir Bindestrich versehen. Jetzt klappt's ohne Probleme.
Mahlzeit Hannes,
Allerdings gibt mir access dann 'ne Eingabemaske und will Parameterwerte haben ???
Dann erkundige Dich, wie Du in dem von Dir benutzten Datenbanksystem Tabellen- und Spaltennamen escapen bzw. maskieren kannst ... sinnvollerweise in der entsprechenden Dokumentation.
Oder - und das halte ich für die sinnvollere Alternative - verzichte in Tabellen- und Spaltennamen auf Zeichen, die in SQL eine besondere Bedeutung haben ... z.B. Operatoren, Sonderzeichen usw.
Was spricht gegen eine Benennung wie z.B. "NUTZER_NEU"?
MfG,
EKKi