![]() |
Datenbank: MSSQL • Version: 2000 • Zugriff über: CoreLabs SDAC
Welche möglichkeiten für ein Select-statement?
Hi Ihr,
ich steh grad aufm Schlauch.... Ich habe 2 Tabellen. Die eine ist mit Mitarbeitern. Jeder Mitarbeiter hat eine mitarbeiter_id. Die zweite Tabelle hat Vorfälle. in der steht die mitarbeiter_id und eine vorfall_id ich möchte mit jetzt alle mitarbeiter ausgeben lassen, die NICHT eine bestimmte Vorfall_ID haben. welche möglichkeiten gibt es , diese abfage zu formulieren? könnt ihr mir mal auf die sprünge helfen? danke ;-) |
Re: Welche möglichkeiten für ein Select-statement?
Blödsinn gelöscht. Habs falsch verstanden.
|
Re: Welche möglichkeiten für ein Select-statement?
Hallo,
folgende Abfrage:
SQL-Code:
macht folgendes: Die innere Abfrage gibt alle MA, die einen bestimmten Vorfall haben (hier "2"), in der äußeren werden nun alle selektiert, die nicht in der inneren rausgegeben werden.
SELECT Mitarbeiter
FROM MA where MA.Mitarbeiter NOT IN (SELECT MA.Mitarbeiter FROM MA LEFT JOIN VorfallTab ON MA.Mitarbeiter = VorfallTab.Mitarbeiter WHERE VorfallTab.Vorfall="2"); Was einfacheres fällt mir im Moment nicht ein. Bis dann Peter |
Re: Welche möglichkeiten für ein Select-statement?
SQL-Code:
Aber ohne Gewähr. 8) Richtung müßte stimmen, hoffentlich. :mrgreen:
SelectSQL.Add ('SELECT M.*,V.* FROM MITARBEITER M JOIN VORFAELLE V');
SelectSQL.Add ('ON (V.ID_MITARBEITER = M.ID) '); SelectSQL.Add ('WHERE (V.NR <> '+Edit1.Text+')'); |
Re: Welche möglichkeiten für ein Select-statement?
@Hansa:
Wenn jetzt aber ein Mitarbeiter einen anderen Vorfall hat, der gerade nicht abgefragt wird, dann erscheint er in der Antwort-Tabelle. Angenommen, wir wollen wissen, welcher Mitarbeiter keinen Vorfall "x" hat, dann erscheint hier jeder Mitarbeiter, der z.B. einen Vorfall "y" hat. Das war aber hier wohl nicht gemeint. Das Problem bei SQL ist ja, dass die Nicht(!)existenz nicht gerade besonders simpel abzufragen ist. Bis dann Peter |
Re: Welche möglichkeiten für ein Select-statement?
Oh mist... ich vergass zu sagen, das ein mitarbeiter mehrere vorfälle haben kann.
tut mir leid. somit funzt dann hansas ansatz nicht mehr. @Prehders: hmm.. das ist ne lösung! das mit den nicht-existenzen ist echt nen problem. allerdings koppelt deine abfrage eigendlich 2 abfragen. wenn du jetzt ne tabelle mit 12 mio kunden hast und es da versuchst,dann kann es schon ein weilchen dauern..... hmm.. aber es ist erstmal ne lösung. vielen dank erstmal..... |
Re: Welche möglichkeiten für ein Select-statement?
ihr denkt zu kompliziert. :mrgreen: Es gibt im Join noch zwei wichtige Wörter : LEFT/RIGHT und OUTER
|
Re: Welche möglichkeiten für ein Select-statement?
Delphi-Quellcode:
so?
select mitarbeiter.* from mitarbeiter left outer join vorfall on mitarbeiter.id=vorfall.id
where vorfall.id is null hmmm... flitze gleich inne firma und werd das mal ausprobieren. hast recht. müßte auch funktionieren. jetzt muss ich nur mal schauen, welches schneller ist und weniger resourcen braucht ;-) werd ich nachher sehen. Vielen dank erstmal. |
Re: Welche möglichkeiten für ein Select-statement?
Zitat:
|
Re: Welche möglichkeiten für ein Select-statement?
Könnt ihr denn kein richtiges SQL mehr?
Immer dieser JOIN-Kinderkram. :mrgreen: Das Problem lässt sich total easy per StiNo SQL92 lösen:
SQL-Code:
SELECT X
FROM Y WHERE Z not in (SELECT A FROM B WHERE C = :BöserVorfall) |
Re: Welche möglichkeiten für ein Select-statement?
Moin Zottel,
ich habe hier mal "übersetzt" was Robert_G allgemein hingeschrieben hat :wink: :
SQL-Code:
SELECT ma.vorname, ma.nachname
FROM mitarbeiter ma WHERE ma.mitarbeiter_id NOT IN (SELECT DISTINCT v.mitarbeiter_id FROM vorfall v WHERE v.vorfall_id = :id); |
Re: Welche möglichkeiten für ein Select-statement?
Man sollte aber an die Performance denken.
![]() |
Re: Welche möglichkeiten für ein Select-statement?
Zitat:
Denn:
|
Re: Welche möglichkeiten für ein Select-statement?
@Robert: Warum nicht an die Performance denken? Die ist immer Wichtig. Klar geht es hier darum, dass MEHRERE Detaildatensätze vorhanden sind. Oder wolltes nur sagen, dass Perle in dem anderen erwähnten Thread nicht richtig liegt?
|
Re: Welche möglichkeiten für ein Select-statement?
@Quake: ich bezweifle dass hier ein Join schneller ist. Im ersten Schritt werden alle Mitarbeiter-IDs rausgesucht, welche den Vorfall mit der Nummer "id" hatten. Ansclhießend werden alle Mitarbeiter rausgesucht, deren IDs nicht in der vorherigen Ergebnismenge liegen. Das ist IMHO die übersichtlichste (und auch schnellste) Lösung. Und wenn du dir bei einer solchen Abfrage mit einem Join 2 ns sparst, was nützt dir das wenn du 2 Wochen später das SQL-Statement nicht mehr verstehst? ;)
Greetz alcaeus |
Re: Welche möglichkeiten für ein Select-statement?
Ok, das würde bedeuten, das es keine Performanceunterschiede gibt, oder. Dann ist es also reine Geschmackssache welche der beide SQL Statements man verwendet. Aber SQL verlernt man nicht in 2 Wochen. Und wenn dann spart men eher 2 'e's, weil in SELECT so viele drinn sind. :-D
Soll jeder verwenden wie er es mag. :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz