Hallo alle zusammen,
ich komme gerade nicht weiter und bräuchte mal einen Denkanstoß.
Es gibt eine tblMitarbeiterQualis in dem es zwei relevante Felder gibt: F_MitarbeiterID und F_QualiID.
Nun möchte ich eine Abfrage erstellen die mir alle MitarbeiterIDs anzeigt, bei denen die F_QualiID z.B. 12 UND 13 ist.
Ich bekomme es aber nur mit ODER hin, sobald ich eine AND Verkettung benutzte, zeigt er mir keine Datensätze mehr an.
Ja es gibt genug IDs bei denen beide Kriterien vorhanden sind.
Er soll mir halt die IDs anzeigen, die in diesem Fall beide F_QualiIDs (12 und 13) haben.
Versucht habe ich:
SELECT F_MitarbeiterID
FROM tblQualiMitarbeiter
WHERE F_QualiID=12 AND F_QualiID=13
Wie komm ich da weiter?
Ich sehe schon das der Fehler darin liegt, dass er beide Werte für F_QualiID in dem selben Datensatz überprüft, nur wie löse ich das?
Grüße
Hallo,
ich bin der Meinung, es muss ein Oder (Or) sein.
Datensätze mit der ID 12 Oder 13, Und macht hier keinen Sinn.
Hi,
ja habe ich am Anfang auch gedacht, aber dann könnte es ja sein dass Mitarbeiter X die F_QualiID 12 hat, aber NICHT 13.
Ich will aber nur die sehen, die BEIDE IDs haben.
Hallo,
sorry, ich hatte das BEIDE überlesen.
Da muss ich jetzt aber passen, habe ich auf die Schnelle auch nichts auf Lager.
Da musst Du mal auf die SQL Spezis warten.
Zitat von: Xoar am Mai 08, 2019, 15:31:19
Nun möchte ich eine Abfrage erstellen die mir alle MitarbeiterIDs anzeigt, bei denen die F_QualiID z.B. 12 UND 13 ist.
SELECT m1.F_MitarbeiterID
FROM tblQualiMitarbeiter m1
WHERE m1.F_QualiID = 12
AND EXISTS (
SELECT 'x'
FROM tblQualiMitarbeiter m2
WHERE m1.F_MitarbeiterID = m2.F_MitarbeiterID
AND m2.F_QualiID = 13
);
Hallo,
danke für das Beispiel.
Anhand der Komplexität merke ich aber, dass diese Variante recht Aufwendig wird.
Mein Plan war in einem Listenfeld x beliebige Einträge zu markieren, die dann nach diesem Prinzip dargestellt werden. Aber wenn ich dann 7 oder 8 Einträge markiert hätte, wäre das ja eine riesen Abfrage mit 7 Unterabfragen und das alles dynamisch....
Achherjeee
Evtl. geht das mit ner VBA Schleife einfacher :/
@Xoar
Wenn du die Kriterien aus einem Listfeld holst, kommst du nicht darum
herum die Abfrage in VBA zusammenzustellen.
Ich glaube aber nicht, dass du da jeweils entsprechend viele Subselects
benötigst. Dabei zu helfen muss ich im Moment aber den SQL-Spezies
überlassen.
gruss ekkehard
ZitatNun möchte ich eine Abfrage erstellen die mir alle MitarbeiterIDs anzeigt, bei denen die F_QualiID z.B. 12 UND 13 ist.
Die einfache AND-Verkettung der Kriterien kann nicht funktionieren, da ein Datensatzfeld nur immer einen Wert enthalten kann und somit bei Filterung eine leere Datenmenge entsteht.
SELECT
F_MitarbeiterID
FROM
tblQualiMitarbeiter
WHERE
F_QualiID IN (12, 13)
GROUP BY
F_MitarbeiterID
HAVING
COUNT(*) = 2
Die farbig markierten Anteile lassen sich nicht als Parameter direkt übergeben, sondern müssen über ein Zusammensetzen der SQL-Anweisung per VBA eingesetzt werden. Da ein Listenfeld mit Mehrfachauswahl sowieso nur per VBA ausgewertet werden kann, ist das dann kein großer Zusatzaufwand.
Bitte beachten: Die Anzahl der Elemente in der IN-Auflistung muss mit jener in der HAVING-Klausel übereinstimmen mit dem Vorbehalt, dass die FK-Kombinationen in der Tabelle duplikatfrei sind.
Ah vielen Dank, da kann ich gut mit arbeiten.
Das dynamische Anpassen in VBA kriege ich hin.