grosses problem mit kreuztabelle
-
hallo,
ich muss für ein kunden eine Art von Berufsprofilen ausgeben und speichern.Dazu gibt es verschiedene Gruppen mit jeweils verschiedenen Werten. Um einigermassen flexibel zu sein, hab ich leider folgende Tabellen erstellt:
* SL_STELLENLEXICON SL_ID SL_TITEL 21 'Leiter Engineering' 41 'Bauleiter' 42 'Lead Engineer' * SL_STELLENLEXICON_GRUPPEN SLG_ID SLG_NAME 51 'Funktion' 52 'Laufbahn' 53 'Softskills' * SLW_STELLENLEXICON_WERTE SLW_ID SLG_ID SLW_WERT 101 51 'Produktion' 102 51 'Einkauf/Logistik/Import' 103 52 'Führungslaufbahn' 104 52 'Fachlaufbahn' * SLZ_STELLENLEXICON_ZUWEISUNGEN SLZ_ID SLZ_SL_ID SLZ_SLG_ID SLZ_SLW_ID 1 21 52 103 1 21 52 104
d.h. in der Tabelle "zuweisungen" stehen sämtliche wertezuweisungen für die einzelnen gruppen.
Mein Problem ist nun, dass ich eine einschränkende Mehrfachauswahl erstellen sol, aber ich mit den Daten nicht zurechtkomme, denn ich
bekomme die abfrage nicht so hin, dass ich alle Berufsprofile (SL_ID) ermittel,
die als Funktion(SLG_ID=51) "Produktion" oder "Einkauf/Logistik/Import" haben UND!!!
als Laufbahn (SLG_ID=52) 'Führungslaufbahn' und 'Fachlaufbahn' haben.#Problem ist die kombination aus und / oder bzw der tatsache, dass alle möglichen werte in einer tabelle stehen.
z.zt sieht mein sql-Staement so aus:
SELECT
DISTINCT SL_ID
FROM
SLZ_STELLENLEXICON_ZUWEISUNGEN SLZ
inner join SL_STELLENLEXICON SL ON SL.SL_ID = SLZ.SLZ_SL_ID
inner join SLW_STELLENLEXICON_WERTE SLW ON SLW_ID = SLZ_SLW_ID
inner join SLG_STELLENLEXICON_GRUPPEN ON SLG_ID = SLZ_SLG_IDWHERE ( LOWER(SL_TITEL) LIKE '%bauleiter%' OR LOWER(SLW_WERT) LIKE '%bauleiter%' )
AND (
(SLW_ID IN(156, 157) )
AND (SLW_ID IN(325) )
)aber die abfrage der SLW_ID funktioniert nicht, da logischerweise bei keinem Datensatz die SLW_ID 156 UND 325 sein kann
jemand eine Idee wie ich das lösen kann?
-
rüddi schrieb:
[..]
aber die abfrage der SLW_ID funktioniert nicht, da logischerweise bei keinem Datensatz die SLW_ID 156 UND 325 sein kann
jemand eine Idee wie ich das lösen kann?
Ähem, ich habe mir dein Statement zwar nicht genau angesehen, aber wenn du Datensätze mit einer SLW_ID = 156 bzw.(aka oder!) SLW_ID = 325 abfragen willst/musst, dann musst du das mit "OR" machen!
-
genau das ist ja mein problem dabei, dass die abfragen immer mehr einschränken sollen.
wenn ich diese mit oder verknüpfe, bekomme ich logischerweise immer mehr ergebnisse.
habs nun erstmal mittels script gelöst.
Die erste gruppe wird mittels sql-abgefragt, als ergebnis bekomme ich die passenden sl_id's (der einen gruppe).
Beim SQL-Statement der nächsten gruppe werden die sl_id's mit einbezogen (... AND SL_ID in (....). und die zurückgegebenen sl_id's werden wieder der nächsten abfrage übergeben....somit brauche ich für jede gruppe (bei mir insg. 7) ein SQL-Aufruf.
schöner wäre es mit einem
-
rüddi schrieb:
schöner wäre es mit einem
Du könntest ein Subselect einbauen.
SELECT [bla] WHERE SLW_ID IN(156, 157) AND SLZ_ID IN (SELECT [bla] WHERE SLW_ID IN(325))
-
aber für die einzelnen subselect brauche ich die entsprechenden sl_id's die ich nur mittels zusätzlichen selects rausbekomme.
also auch mind. 1 select pro gruppe
-
Dann mach doch mehrere OR
WHERE (wasweiich = 3 OR wasaucimmer = 23) AND (kjhsdflkj)
-
_
... AND (
(SLW_ID IN(156, 157) )
AND (SLW_ID IN(325) )
)funktioniert nicht wie bereits gesagt (1.post).
aber danke euch. ich lass die einzelnen sql-aufrufe nun so stehen.einzige möglichkeit die mirt noch einfällt: ein einziges statement erstellen, in denen 7 anweisungen (pro gruppe eine) ineinander verschachtelt werden.
sowas wie:
select SL_ID from foobar where (SLW_ID IN(156, 157) AND SLG_ID=4) and SL_ID in (Select SL_ID from foobar where (SLW_ID IN(155) AND SLG_ID=2) and SL_ID in (...u.s.w -..)