SQl ORACLE abfrage
dagi
- datenbank
Hallo,
ich habe ein Problem und zwar wie bekomme ich aus folgenden Quellcode hin das die Member ID in der Abfrage sprich in den Ergebniss aus der Abfrage nur EINMAL vorkommt. Bis jetzt ist es der Fall das wenn eine ID zwei EMAILS hat sie auch zweimal vorkommt.
Dachte das ich da Filter das nur einmal die ID in der liste steht
SELECT DISTINCT KONTAKT_ID, MEMBER_ID, KONTAKTTYP_id, content, private_01, priority, beschreibung
FROM CONTACT
WHERE contact_type_id = 5
and priority = 1
ORDER BY member_id
Bitte um hilfe
Hi,
ich habe ein Problem und zwar wie bekomme ich aus folgenden Quellcode hin das die Member ID in der Abfrage sprich in den Ergebniss aus der Abfrage nur EINMAL vorkommt. Bis jetzt ist es der Fall das wenn eine ID zwei EMAILS hat sie auch zweimal vorkommt.
welche der beiden E-Mails soll denn ausgewählt werden?
Cheatah
welche der beiden E-Mails soll denn ausgewählt werden?
Cheatah
»»
bevorzugt die dienstliche also die mit private_01 = 0
und priority 1
ist aber keine dienstliche vorhanden dann die private
die mit private_01 =1 und priority = 1
hab mir gedacht anhand er Member_id zu filtern das die nur einmal vorkommt.
yo,
bevorzugt die dienstliche also die mit private_01 = 0
und priority 1
ist aber keine dienstliche vorhanden dann die private
die mit private_01 =1 und priority = 1
das kann aber nur klappen, wenn jeweils auch nur eintrag (privat oder dienstlich pro person)in der tabelle kontakt vorhanden ist. ist dies den sichergestellt ?
Ilja
das kann aber nur klappen, wenn jeweils auch nur eintrag (privat oder dienstlich pro person)in der tabelle kontakt vorhanden ist. ist dies den sichergestellt ?
Ilja
bei select reicht mittlerweile SELECT content, MEMBER_ID
und ja es ist wenn alles klappt nur ein eintrag vorhanden
im moment ist bei manchen ein dienstlicher udn ein privater vorhanden.
da meine abfrage noch nicht funktioniert.
Deswegen habe ich ja hier geschrieben
hier nochmal der select befehl in verkürzter form
SELECT mail, MEMBER_ID
FROM kontakt
WHERE kontakt_type_id = 5
and priority = 1
ORDER BY member_id;
with min_private as (
select min(c4.private_01)
from contact c4
where c4.member_id=53
and c4.contact_type_id=5
group by c4.member_id
)
select content, MEMBER_ID
from contact c
where c.contact_id in (select c2.contact_id
from contact c2
where c2.member_id=53
and c2.contact_type_id=5
and c2.priority in (select min(c3.priority)
from contact c3
where c3.member_id=53
and c3.contact_type_id=5
and c3.private_01 in (select * from min_private)
group by c3.member_id)
and c2.private_01 in (select * from min_private))
and c.contact_type_id=5
Hab jetzt mit dieser abfrage das problem naja nicht gelöst aber einen weg gefunden.
Kann mir jetzt da einer weiterhelfen? wie kann ich aus der abfrage eine abfrage erstellen, bei der ich nicht die memberid fest vorgebe. in dem fall die 53
yo,
Kann mir jetzt da einer weiterhelfen? wie kann ich aus der abfrage eine abfrage erstellen, bei der ich nicht die memberid fest vorgebe. in dem fall die 53
der lösungsweg sollte eine korrelierte unterabfrage in der WHERE klausel sein, die prüft, ob der bevorzugte Wert vorhanden ist kombiniert mit einer CASE Anweisung, die entscheidet, ob der Datensatz nun genommen wird oder nicht.
Mögliche fälle:
1. Der aktuelle Datensatz besitzt den bevorzugten Wert, dann nimm den Datensatz.
2. der aktuelle Datensatz besitzt nicht den bevorzugten Wert, und es gibt für diese Person in keinen anderen Datensatz diesen bevorzugten Wert, dann nimm diesen Datensatz.
3. der aktuelle Datensatz besitzt nicht den bevorzugten Wert, und es gibt für diese Person in einen anderen Datensatz diesen bevorzugten Wert, dann nimm diesen Datensatz nicht.
Ilja