2017-02-18 24 views
1

У меня есть следующие две таблицы:SQL: выпуск объединения таблиц

attributevalueassign 

itm_id attr_value_id attr_id 
----- ------------- ------- 
396  237    1 
396  20    2 
715  274    1 
715  16    2 

attributevalue 

attr_id attr_value_id  attr_value 
------- -------------  ---------- 
1   237    3055020 
1   274    2454518 
2   16    Dunlop 
2   20    Vogue 

Мне нужно, чтобы иметь возможность написать запрос, когда я поставить ITEM_ID (например: 396), я возвращаюсь к следующему результату:

itm_id attr_value_id attr_id attr_value 
------ ------------- ------- ---------- 
396  237    1   3055020 
396  20    2   Vogue 

Когда я пытаюсь с помощью INNER JOIN, я получаю больше строк, чем я хочу:

SELECT  dbo.select_attributevalue.attr_value, dbo.select_attributevalueassign.itm_id 
FROM   dbo.select_attributevalueassign INNER JOIN 
         dbo.select_attributevalue ON dbo.select_attributevalueassign.attr_id = dbo.select_attributevalue.attr_id 
WHERE  (dbo.select_attributevalueassign.itm_id = 396) 

itm_id attr_value_id attr_id attr_value 
------ ------------- ------- ---------- 
396  237    1  3055020 
396  237    1  2454518 
396  20    2  Dunlop 
396  20    2  Vogue 

Итак, моя мысль в том, что я, вероятно, шо не использовать JOIN, но я не знаю, что это за альтернатива. Я вырыл на этом сайте, ища решение, и есть много вопросов о том, как удалить дубликаты записей с помощью соединения, но я не видел ничего похожего на то, что я просил. Мои знания SQL-запросов являются базовыми, поэтому я не уверен, что делать. Любая помощь приветствуется!

ответ

2

Возможно, вам необходимо выполнить внутреннее соединение двумя колонками attr_value_id и attr_id. Попробуйте этот запрос:

SELECT  dbo.select_attributevalue.attr_value, dbo.select_attributevalueassign.itm_id 
FROM   dbo.select_attributevalueassign 
    INNER JOIN dbo.select_attributevalue ON 
    dbo.select_attributevalueassign.attr_id = dbo.select_attributevalue.attr_id 
    AND dbo.select_attributevalueassign.attr_value_id = dbo.select_attributevalue.attr_value_id 
WHERE  (dbo.select_attributevalueassign.itm_id = 396) 
+0

Он отлично работает! Благодаря! –