Hallo,
also wo fangen wir an:
- Dein Datenmodell ist falsch (nicht einfach nur schlecht)
Tabellen besitzen einen Schlüssel. Das ist ein Attribut (oder mehrere), die eine Zeile genau auffindbar machen.
Tabellen werden verknüpft, indem man auf diese Schlüssel referenziert.
Auto könnte der Schlüssel der einen Tabelle sein, PS aber kaum der der anderen (obwohl du PS so behandelst). Es gibt sicherlich mehrere Motoren gleicher Leistung mit unterschiedlichem Hubraum.
Besser:
Auto:{[autoid, marke, farbe, motorid]}
Motor:{[motorid, leistung, hubraum]}
CREATE TABLE Motor (
motorid INTEGER NOT NULL,
leistung DECIMAL(16,6),
hubraum DECIMAL(16,6),
CONSTRAINT pk_motor PRIMARY KEY (motorid)
);
CREATE TABLE Auto (
autoid INTEGER NOT NULL,
marke VARCHAR(30),
farbe VARCHAR(30),
motorid INTEGER,
CONSTRAINT pk_auto PRIMARY KEY (autoid),
CONSTRAINT fk1_auto FOREIGN KEY (motorid) REFERENCES Motor (motorid)
);
SELECT *
FROM Auto a, Motor m
WHERE a.motorid = m.motorid
AND m.hubraum > 3.0;
Bei Deinem Modell sieht das so aus:
SELECT *
FROM Auto a, Motor m
WHERE a.PS = m.PS
AND m.hubraum = 3.0;
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]