SQL - skriva om WHERE till JOIN
Hej, jag har följande tabeller:
CREATE TABLE expert(
id INT PRIMARY KEY,
name VARCHAR(128) NOT NULL);
CREATE TABLE expertise_area(
id INT PRIMARY KEY,
topic VARCHAR(128) NOT NULL,
subarea_of INT,
CONSTRAINT fk_subarea_of FOREIGN KEY(subarea_of) REFERENCES expertise_area(id));
CREATE TABLE expert_in(
expert INT NOT NULL,
expertise_area INT NOT NULL,
PRIMARY KEY(expert, expertise_area),
CONSTRAINT fk_expert_in FOREIGN KEY(expert) REFERENCES expert(id),
CONSTRAINT fk_expertise_area FOREIGN KEY(expertise_area) REFERENCES expertise_area(id));
Nu vill jag veta vilka personer som är experter i flugfisker, då kan man göra:
SELECT expert.name FROM expert, expert_in, expertise_area
WHERE expert.id=expert_in.expert
AND expert_in.expertise_area = expertise_area.id
AND expertise_area.topic = 'flugfiske';
Med querien ovan får jag korrekt resultat, endast de experter som är listade som är experter i flugfiske returneras. Jag får problem när jag försöker skriva om frågan med joins istället:
SELECT expert.name FROM (expert
INNER JOIN expert_in ON expert.id=expert_in.expert
INNER JOIN expertise_area ON expert_in.expertise_area=expertise_area.id
INNER JOIN expertise_area AS ea ON ea.topic = 'flugfiske');
Denna verkar returnera alla experter i expert_in-tabellen inte bara de som är experter i flugfiske. Om jag ändrar ändrar flugfiske till nåt som inte finns så returneras inga träffar och det är som det ska vara, men ändå får jag med träffar som är felaktiga.
Hur ska jag skriva om JOIN-frågan så den beter korrekt som WHERE-varianten?