Probleme bei Selektion
Mäx
- datenbank
Hallo Forum,
ist stehe gerade gehörig auf dem Schlauch bei einer Datenbankabfrage, mal sehen, ob ich hier erklären kann, was ich suche.
Ich habe eine Tabelle, in der pro Person beliebig viele Einträge sein können. Die Einträge enthalten jeweils einen bestimmten string als Wert.
z.B.
personenId wert
1 a
1 b
1 c
1 d
2 a
2 b
2 c
3 b
4 a
4 d
Ich benötige nun eine Selektion, die mir alle Personen sucht, die einen bestimmten Wert haben, und gleichzeitig einen anderen Wert nicht haben.
z.B.
select personenID from tabelle where wert = 'a' and wert <> 'c'
... aber natürlich bezogen auf _alle_ Eintrage der Person.
'a' und 'nicht c' träfe in obigem Beispiel also nur auf Person 4 zu.
Ich hoffe, ihr wisst, was ich meine. Das Beispiel ist natürlich für die Darstellung hier sehr vereinfacht.
Wie kann ich das realisieren?
Gruß, Mäx
Hallo,
solange Du kein Update vorhast, sondern nur ein Select, kannst Du die Tabelle unter zwei Aliasen doppelt ansprechen und einen Selbstbezug herstellen.
Näheres dazu steht im MySQL-Handbuch.
Leider habe ich im Moment keinen Link parat. da müsstest Du bitte erstmal selber suchen, wenn kein Anderer aushilft.
LG
Chris
yo,
solange Du kein Update vorhast, sondern nur ein Select, kannst Du die Tabelle unter zwei Aliasen doppelt ansprechen und einen Selbstbezug herstellen.
habe da meine zweifel, dass das so einfach funktioniert, lasse mich aber gerne vom gegenteil überzeugen.
Ilja
yo,
da fällt mir spontan wieder mal die allseits gefürchtete korrelierende unterabfrage ein, wobei dein dbms unterabfragen unterstützen müßte.
SELECT DISTINCT tab1.personenId
FROM tabelle AS tab1
WHERE 'dein_wert' NOT IN
(SELECT wert FROM tabelle AS tab2 WHERE tab2.personenId = tab1.personenId)
Ilja
yo,
ein kleiner tippfehler in der unterabfrage fehlt der alias der zweiten tabelle....
(SELECT tab2.wert FROM tabelle AS tab2 WHERE tab2.personenId = tab1.personenId)
und dann ist mir auch noch meine alte bundesliga-abfrage eingefallen, wie man das problem auch ohne unterabfragen lösen kann. die gibt es aber nur, wenn du uns dein dbms und deine version nennst. sollte zwar auch ohne gehen, aber als alte jäger und sammler wollen wir doch alle unseren spass haben...
Ilja
Danke schonmal euch beiden, ich denke, ihr habt mich auf die richtige Fährte gebracht. Mal schauen, wie weit ich komme.
und dann ist mir auch noch meine alte bundesliga-abfrage eingefallen, wie man das problem auch ohne unterabfragen lösen kann. die gibt es aber nur, wenn du uns dein dbms und deine version nennst. sollte zwar auch ohne gehen, aber als alte jäger und sammler wollen wir doch alle unseren spass haben...
ich arbeite mit MS SQL Server 2000