Помощь по сложному SQL-запросу - PullRequest
1 голос
/ 25 июня 2010

Я все еще неофит, когда дело доходит до запросов SQL, поэтому я надеялся, что кто-нибудь сможет мне помочь.

Предположим, у меня есть 3 таблицы, Skill, Set и Contact, и 2 таблицы связывания, SkillSet и ContactSet. (3 таблицы имеют столбец «ID», который используется в качестве первичного ключа)

Контакты могут иметь любое количество наборов и наоборот (многие ко многим)

Наборы могут иметь любое количество навыков, и наоборот (также многие ко многим)

Когда я получу идентификатор навыка, я хочу, чтобы каждый контакт возвращался с набором, содержащим этот навык.

Все еще со мной?

Вот что у меня так далеко:

SELECT        Set.ID as expr1
FROM SkillSet
WHERE Skill.ID = @SkillID
//this selects every set containing the Skill.


SELECT         Contact.ID
FROM           ContactSet
WHERE SET.ID = ?
//this is where I run into problems. I want to use the records returned from
//the previous SELECT query (expr1) but I'm unsure how. 
//Would it be expr1.ID or expr1.Set.ID?

Спасибо.

1 Ответ

0 голосов
/ 25 июня 2010

это должно работать нормально или, по крайней мере, привести вас к окончательному решению, вам нужен только один запрос:

declare @skillid int 
set @skillid = 1

SELECT C.*
  FROM  contact c
    inner join SetContact SC on (sc.contactId = C.contactId)
    inner join SkillSet SS on (ss.SetId = SC.SetId)
  WHERE (SS.SkillId = @SkillId)
...