Reputation: 25022
I have 3 tables:
Advancements
id
Advancement_Requirements
advancement_id,
requirement_id
Requirements
id
description
I want to get all of the requirments.descriptions
for a certain advancement.id
. I am able to do this, but I have to use DISTINCT
, which I do not want to do. If I don't use DISTINCT
, I get pages and pages of results. Here is the query that I am running that works. Please tell me how to get my results without DISTINCT
.
select distinct(requirements.description)
from requirements
inner join advancement_requirements on requirements.requirement_id = advancement_requirements.requirement_id
inner join advancements on advancement_requirements.advancement_id = 1;
What am I doing wrong?
Upvotes: 0
Views: 106
Reputation: 3
You are not associating the Advancements table in your join so it just return a result for each requirement times a Advancements register.
select requirements.description from requirements inner join advancement_requirements on requirements.requirement_id = advancement_requirements.requirement_id inner join advancements on advancement_requirements.advancement_id = advancements.id
where advancements.id = 1;
Upvotes: 0
Reputation: 656251
If you have foreign keys and a UNIQUE
(or PRIMARY KEY
) constraint on (advancement_id, requirement_id)
in Advancement_Requirements
(the typical layout for such an n:m relationship), then this simple query would not need DISTINCT
.
SELECT r.description
FROM requirements r
JOIN advancement_requirements ar USING (requirement_id)
WHERE ar.advancement_id = 1;
Or there is information missing in your question.
Upvotes: 0
Reputation: 66
I'm not sure what your are trying to accomplish but my guess is that you try to join tables and you have a search criteria. So you should do something like this.
select
requirements.description
from requirements
inner join advancement_requirements on requirements.requirement_id = advancement_requirements.requirement_id
inner join advancements on advancement_requirements.advancement_id = advancements.id
WHERE advancements.id = 1;
Upvotes: 1