Abfrage über die Gleichheit der Jahrgänge

Goaew

Grünschnabel
Hallo, ich habe eine Tabelle Personal (Schema und Daten sind unten) ich versuche rauszubekommen welche Angestellten im selben Jahrgang geboren sind und das gleiche Gehalt wie in der Mitarbeiter in PNR 829 beziehen. Ich habe viele Abfragen durchprobiert ohne erfolg.. meine letzte Abfrage war diese :

select name
from pers p
where exists (select*
from pers c
where p.jahrg = c.jahrg and c.gehalt = 54000 );


Was nicht klappt, weil ständig dasselbe Jahrgang derselben Person verglichen wird und somit nur Schmidt als Ergebnis rauskommt, was zur abfrage passt aber nicht zu dem was ich wirklich möchte. Kann mir jemand sagen wo mein Denkfehler liegt ? Ich weiss nicht wie ich von derselben Tabelle Daten miteinander vergleichen soll. Danke im Voraus!

SQL:
CREATE TABLE abt (

anr             char(3) PRIMARY KEY,
aname           varchar2(20) not null,
ort             varchar2(20) not null);

CREATE TABLE pers (

pnr         integer PRIMARY KEY,
name        varchar2(20) not null,
jahrg       integer,
eindatum    date,
gehalt      integer not null,
beruf       varchar2(20) not null,
anr         char(3) not null CONSTRAINT pers_abt_fk REFERENCES abt(anr),
vnr         integer CONSTRAINT pers_pers_fk REFERENCES pers(pnr));


und die daten:

SQL:
INSERT INTO abt (anr, aname, ort) VALUES ('K51', 'Entwicklung', 'Erlangen');
INSERT INTO abt (anr, aname, ort) VALUES ('K53', 'Buchhaltung', 'Nuernberg');
INSERT INTO abt (anr, aname, ort) VALUES ('K55', 'Personal', 'Nuernberg');

INSERT INTO pers (pnr, name, jahrg, eindatum, gehalt, beruf, anr, vnr) VALUES (123, 'Mueller', 1958, '01-09-1980', 48000, 'Programmierer', 'K51', NULL );
INSERT INTO pers (pnr, name, jahrg, eindatum, gehalt, beruf, anr, vnr) VALUES (406, 'Coy', 1950, '10-03-1986', 60000, 'Kaufmann', 'K55', 123);
INSERT INTO pers (pnr, name, jahrg, eindatum, gehalt, beruf, anr, vnr) VALUES (829, 'Schmidt', 1960, '01-06-1990', 54000, 'Kaufmann', 'K53', 123);
INSERT INTO pers (pnr, name, jahrg, eindatum, gehalt, beruf, anr, vnr) VALUES (874, 'Abel', NULL, '01-05-1994', 42000, 'Software Entwickler', 'K55', 829);
INSERT INTO pers (pnr, name, jahrg, eindatum, gehalt, beruf, anr, vnr) VALUES (503, 'Junghans', 1950, NULL, 33000, 'Programmierer', 'K51', 123);
 
Schmidt ist in deinen Daten der einzige 1960er.
Ergo kann nur er dabei rauskimmen

Zu deinem SQL:
Das Gehalt solltet du nicht auf Schmidt anwenden sondern auf die zu suchenden Persone
SQL:
select p.name
from pers p, pers m
where
    m.pnr = 829
    and p.jahrg = m.jahrg
    and p.gehalt = m.gehalt
    and p.pnr <> m.pnr

Das gibt bei den Testdaten natürlich keine Treffer zurück.
 
Zurück