Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Problem bei SQL-Abfrage“

tiekay

Noch nicht viel geschrieben

Hallo an alle.
Ich hoffe, ich bin mit meiner Frage hier nich ganz falsch. Ich bin gerade dabei, eine Abfrage zu erstellen. Vielleicht erstmal eine kleine Erklärung:

Ich habe eine Tabelle mit diversen Spalten. 2 davon sind für die zu erstellende Abfrage wichtig. Kundennummer und Servicecode. Jeder Eintrag in der Tabelle zeigt einen Tarif, oder eine bestimmte Hardware an, die ein Kunde hat. Es kann also in der Spalte Kundennummer, eine Kundennummer mehrfach vorkommen. Verschiedene Kunden können auch in der Spalte Servicecode den gleichen Eintrag haben.

Jetzt brauche ich eine Abfrage, bei der ich 2 Servicecodes angeben möchte und am Ende die Kundennummern haben möchte, bei denen die 2 Servicecodes vorkommen.

Beispiel: Kunde 'ABC' hat gleichzeitig Servicecode '123' und '789'

Ich sitze jetz seit letzter Woche an der Abfrage, ich komme aber leider nicht drauf, wie ich das ganze umsetze. Vielleicht hat ja jemand eine Idee.

Achso, was vielleicht noch wichtig zu erwähnen ist, das das ganze in Access benötigt wird.
 

TobiKo

Nicht mehr ganz neu hier

AW: Problem bei SQL-Abfrage

Hallo,
ich weiß nicht ob es die performanteste Lösung ist, aber ich würde es auf die Schnelle so machen:

1. Abfragen aller Kundennummern mit Servicecode1 und in Array speichern
2. Abfragen aller Kundennummern mit Servicecode2 und in Array speichern
3. Schauen, ob eine Kundennummer im Array2 von Array1 vorkommt.

Wenn es große Datenmengen sind, ist dies sicherlich nicht sehr gut, aber falls es sich um eine Liste mit nur 100 Einträgen handelt ist dies nicht all zu schlimm. Vielleicht fällt mir später noch ein, wie man das mit einer Abfrage am besten lösen könnte.

Gruß Tobi
 

Monk2006

Nicht mehr ganz neu hier

AW: Problem bei SQL-Abfrage

Access ist nicht so mein Teil, aber SQL könnte das evtl. so lösen:

Code:
SELECT DISTINCT kundennummer FROM tabellenname WHERE (servicecode="var1" OR servicecode="var2")

Mal so spontan aus dem Bauch heraus, aber ohne Gewähr..aber select distinct sollte die richtige Richtung sein

LG Moni
 
Zuletzt bearbeitet:

tiekay

Noch nicht viel geschrieben

AW: Problem bei SQL-Abfrage

Es gibt tatsächlich intelligente Menschen, die auf die Lösung kommen.

Code:
SELECT * FROM (SELECT Kundennummer FROM Tabellenname WHERE UCase(Servicecode)=UCase(Servicecode1)) AS A, Tabellenname AS B WHERE (A.Kundennummer=B.Kundennummer and UCase(B.Servicecode)=UCase(Servicecode2));
 

tiekay

Noch nicht viel geschrieben

AW: Problem bei SQL-Abfrage

Hier is übrigens noch ne kleine Beispieltabelle:
id kundennummer servicecode pname
1 000000001 ABC Wurst
2 000000002 DEF Brot
3 000000001 DEF Brot
4 000000002 XYZ Messer
5 000000003 ABC Wurst

Die Abfrage soll mir die Kundennummern liefern:
z.B. geb ich Servicecode DEF und XYZ an und die Abfrage soll mir die Kundennummer 000000002, bzw. alle Kundennummern liefern, die beide Servicecodes haben
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Problem bei SQL-Abfrage

Wow, die Tabelle ist ja schrecklich entworfen. Kein Wunder dass die Abfrage kompliziert wird. *grusel*

Das beste wäre wohl, das Ding neu - und diesmal korrekt - zu machen. Aber da möglicherweise schon Anwendungen dafür geschrieben wurden (wie auch immer der Entwickler das nervlich ausgehalten hat), hier eine Lösung. Die ist zwar nicht hübsch, aber anderes kann man für diese Tabelle auch nicht erwarten.

Für einen Service-Code ist die Abfrage natürlich
Code:
SELECT * 
FROM tab t1
WHERE t1.scode = 'scode1'
Für zwei musst du eine Tabelle generieren die alle Kundennummern für den zweiten Code hat und dagegen vergleichen:
Code:
SELECT * 
FROM tab t1
WHERE t1.scode = 'scode1'
AND
t1.kdnr IN (
  SELECT t2.kdnr
  FROM tab t2
  WHERE t2.scode = 'scode2'
)
Für drei Codes geht die Geschichte im gleichen Stil weiter:
Code:
SELECT * 
FROM tab t1
WHERE t1.scode = 'scode1'
AND
t1.kdnr IN (
  SELECT t2.kdnr
  FROM tab t2
  WHERE t2.scode = 'scode2'
  AND t2.kdnr in (
    SELECT t3.kdnr
    FROM tab t3
    WHERE t3.scode = 'scode3'
  )
)
Hoffentlich siehst du das Prinzip und kannst es selbstständig auf beliebig viele Service-Codes erweitern. Offensichtlich müsstest du die Anfrage selbst prozedural erzeugen.
Oder du speicherst 20 Versionen davon als Stored Procedure und rufst die bei Bedarf auf - dann ist das System noch schlimmer als jetzt :)


Duddle
 

tiekay

Noch nicht viel geschrieben

AW: Problem bei SQL-Abfrage

Danke für die einleuchtende Erklärung. Jetz is mir das auch noch klarer geworden.
Das die Tabelle völlig ungünstig strukturiert is, is mir natürlich klar. Aber das is halt leider eine Kundenvorgabe.
 

Pixelaner

Der Pixelaner

AW: Problem bei SQL-Abfrage

Aber das is halt leider eine Kundenvorgabe.

Aber als Experten habt Ihr doch eine Beratungsfunktion. Da muss dem Kunden die Nachteile aufgezählt werden und ein optimaler Lösungsweg vorgestellt werden. Was habt ihr davon wenn mit der Datenbank später niemand mehr arbeiten kann und sowieso alles neu aufgesetzt werden muss ?
 

mammimonstA

grauhliebe

AW: Problem bei SQL-Abfrage

Also ich weiß ja nicht wie die anderen Spalten aussehen, das Beispiel deutet ja schon an, dass sie wahrscheinlich keiner 3NF genügt, aber da die Beziehung Kunde <-> Servicecode offenbar eine X:Y Beziehung abbildet, fällt mir gar keine andere Möglichkeit der Umsetzung - die die Abfrage vereinfachen würde - ein. Also nur interessehalber - wie würdet ihr das denn angehen?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.189
Beiträge
2.582.075
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben