2013-07-29 2 views
0

У меня есть запрос с соединением я использую для извлечения данных из другой таблицы:Возвращения сузили выбор на основании соответствующей таблицы

SELECT [THEME].[NAME], 
     [THEMETYPE].[TYPE] 
FROM [THEME] 
     LEFT OUTER JOIN [THEMETYPE] 
        ON [THEME].[THEMETYPEID] = [THEMETYPE].[PK_THEMETYPE] 
WHERE COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%' 
ORDER BY CASE 
      WHEN [THEMETYPE].[TYPE] IS NULL THEN 1 
      ELSE 0 
      END, 
      [THEMETYPE].[TYPE] 

Мне нужно добавить возможность сужать его вниз, если 3-й таблицу значение совпадает:

Where producttheme.productid = variable-paramater-here 
AND producttheme.themeid = theme.pk_theme 

Вот рис таблицы:

enter image description here

Итак, если 1 выбран выше, он вернет все [Тема]. [Имя] и связанный с ним [ThemeType]. [Тип], где The ThemeId ассоциирован с ProductId = 1

Редактировать: чтобы быть более понятным ThemeId является основным ключом в таблице Theme, где существует имя Theme.Name.

+0

Вы можете присоединиться через к третьей таблице, и написать свой 'on' соответственно? Или это сложнее? –

+0

Как я мог бы присоединиться к третьей таблице? –

+0

У вас может быть несколько операторов JOIN в одном запросе SQL. Прочтите быстрый доступ к соединениям по адресу http://msdn.microsoft.com/en-us/library/aa213233(v=sql.80).aspx, а также взгляните на ответы, появившиеся после моего первоначального комментария , –

ответ

3

Это даст вам некоторое представление о том, пожалуйста, настроить имена столбцов соответственно:

SELECT [Theme].[Name], [ThemeType].[Type] 
FROM [Theme] 
Left Outer Join [ThemeType] 
ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType] 
join ProductTheme PT 
on PT.ProductID=ThemeType.ProductID 
WHERE ProductTheme.ProductID = VARIABLE-PARAMATER-HERE AND ProductTheme.ThemeId = Theme.PK_Theme 
ORDER BY [ThemeType].[Type] 
1

В зависимости от того, нужно ли вам условие WHERE перед добавлением 3-й таблицы, вы можете попробовать один из этих 2-х вариантов:

SELECT * 
FROM TABLE1 T1 
     LEFT OUTER JOIN TABLE2 T2 
        ON T1.FIELDA = T2.FIELDA 
     INNER JOIN TABLE3 T3 
       ON T1.FIELDA = T3.FIELDA 
WHERE T1.FIELDB = 'aaa' 
     AND T3.FIELDC = 12 

или:

SELECT * 
FROM (SELECT T1.FIELDA, 
       T2.FIELDB 
     FROM TABLE1 T1 
       LEFT OUTER JOIN TABLE2 T2 
          ON T1.FIELDA = T2.FIELDA 
     WHERE T1.FIELDC = 'aaa')T3 
     INNER JOIN TABLE3 T4 
       ON T3.FIELDA = T3.FIELDA 
        AND T4.FIELDC = 12 

Я надеюсь, что это дает с чем вы работаете.

Если вы предоставите некоторые примеры данных, я могу настроить рабочий пример.

Смежные вопросы