Computerhilfen.de Logo
Forum
Tipps
News

SQL Abfrage

Hi habe eine kleines Proble bei einer SQL Abfrage.
Es geht um eine Patientendantenbank.
Und zwar habe ich in einer Tabelle die Pat-Daten und in einer anderen die eingegebenen Therapien.
Nun werden für einen Pat mehrer Terapien eingegeben. Zum einen normale Therapien und OP's. Nun will ich alle Pat ohne einen OP Eingriff. Es gibt eine spalte in der Therapientabelle in der die Art der Therapie steht.
Aber wenn ich jetzt abfrage, dass er mir alle Patnr. ohne OP ausgeben soll, wirft er mir alle anderen Therapien die der Pat hatte aus...

Die Abfrage bisher:
select a.pat,a.name, b.diagtxt
from patdaten a, diagnosen b,
where a.pat=b.pat
and b.diagtxt is not 'OP'

Hoffe ihr versteht was ich will :-D


Antworten zu SQL Abfrage:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ja, ich verstehe, was du willst. Hab jetzt nicht so den Plan von SQL, aber was soll das b.diagtxt nach dem SELECT? Wird dadurch nicht die Spalte mit ausgewählt mit dem Ergebnis, dass alle Therapien mit aufgelistet werden? Wäre ein SELECT DISTINCT vielleicht eine Lösung?

leider nicht, da sich dan halt nur ein OP angriff und eine andere Therapie angezeigt wird. Bei distinct werden ja nur gleiche ergebnisse zusammengefasst...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

schlampig und nich gut, aber könnte funktionieren:

select pat,name from patdaten where pat not in (select pat from diagnosen where diagtxt ='OP')

(is ungetestet, hab lange nix mehr in der hinsicht gemacht...)

riskanter wär jetzt, aber definitiv besser:

select pat,name from patdaten inner join diagnosen on patdaten.pat = diagnosen.pat and diagnosen.diagtxt != 'OP'

kann beides funktionieren, aber auch beides total daneben sein.

feedback wär lieb :-) oder kommt wer cleveres als ich und kann dir besser helfen. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Die Variante mit dem Join ist natürlich zu bevorzugen, wobei noch exakt definiert werden sollte, was du ausgegeben haben möchtest.

Der von strough vorgeschlagene INNER JOIN würde dir nur ein Ergebnis liefern, sofern für den Patienten mindestens eine Therapie != OP vorliegt. Denkbar wäre auch noch ein LEFT JOIN, der dir auch Patienten ganz ohne verknüpfte Therapie liefert.

greez 8)
JoSsiF

Vielen Dank strough!!!
"select pat,name from patdaten where pat not in (select pat from diagnosen where diagtxt ='OP')"
Hat prima geklappt!
Da wird meine Kollegein Augen Machen  ;D
 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Augen wird sie auch machen, wenn sie die Query mal auf eine 5-stellige Anzahl von Datensätzen loslässt und sich fragt, wann denn das Ergebnis endlich kommt ;)

ne kein Proble! Habe es heute auf eine fast 6 stellige (ca. 95000) zahl losgelassen und es hat ca. 20 sec.gedauert ::)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Für eine regelmäßige Abfrage wäre mir das entschieden zu lang. Mal die Variante mit dem Join probiert?

Ok habe gerade mal nachgemessen...
War vllt der starke Kaffe... 5 sec :D
Naja einmal im Quatal ist das verkraftbar :D
EDIT:
Left Join geht auf diese Art und weise nicht!


« Excel doppelte Einträge markierenJava: URL abfragen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!