2015-04-22 7 views
0

У меня есть таблица MySQL со следующей структурой:Mysql выберите уникальное значение

id_category | id_product 
    1   1 
    15   1 
    28   1 
    5   2 
    15   2 
    1   2 
    13   3 
    4   3 

Я хотел бы сделать запрос, который я буду использовать внутри «И» раздел объединения структуры, которая выбирает продукты, которые например, id_category 1 и 15, и выход будет идентификатор продукта, но только один раз:

id_product 
    1  
    2  

ответ

0

Вы может использовать это;

select distinct(id_product) from table_name 
where id_category=1 or id_category=15 
group by id_product; 

Вот SqlFiddle пример

EDIT: 

Я понимаю, что вы имеете в виду .. я могу дать два примера использования присоединиться и где положение;

Давайте рассмотрим первый пример;

SELECT `settings`.*, `character_settings`.`value` 
FROM (`settings`) 
LEFT JOIN `character_settings` 
ON `character_settings`.`setting_id` = `settings`.`id` 
WHERE `character_settings`.`character_id` = '1' 

Как вы видите, в первом примере, character_id фильтрует с тем, где пункт однако, where clause фильтрует далеко строки, где left join не удается. Таким образом, мы должны сделать это в присоединиться AND переместить его в объединение:

SELECT `settings`.*, `character_settings`.`value` 
FROM `settings` 
LEFT JOIN 
     `character_settings` 
ON  `character_settings`.`setting_id` = `settings`.`id` 
     AND `character_settings`.`character_id` = '1' 

Так что для того, чтобы использовать WHERE положение в соединение, использовать AND оператор в JOIN. Надеюсь, что это поможет решить ваш вопрос.

EDIT2:

В вашей задаче возможно, что вам нужно использовать OR не AND

+0

Спасибо, что было действительно полезно. Теперь проблема заключается в том, что мне нужно, чтобы она включала его внутри предложения «AND» в JOIN. Как я могу это достичь? –

+0

@ DimitriosMarkopoulos Я не понимал, что вы имеете в виду. Приведите пример, чтобы я мог написать полный запрос – goGud

+0

Да, извините за мой плохой английский. вот сценарий: http://pastie.org/pastes/10107359 –

1

Вы можете сделать как

select 
id_product from table_name 
where id_category in (1,15) 
group by id_product 
having count(*) = 2 
+0

Могу ли я поставить эту выберите внутри и «AND» положение? –

+0

Когда вы делаете, где с 'и' это будет проверять каждую строку, и у вас никогда не будет обоих условий, удовлетворяющих для одной строки, следовательно, у нас есть такой подход, используя 'group by' и' having' –

+0

Так что я должен написать что-то вроде этого : AND (id_category in (1,15) group by id_product с count (*) = 2) "? –

1

Вы можете использовать это:

select distinct(id_product) from TABLENAME 
where id_category in (1,15) 
+1

Этот ответ неправильный. Он вернет' id_product = 2' (a а также правильный ответ). Я могу понять ответ, но не верх. –

+0

Что мне здесь не хватает? Где неверно возвращается идентификатор 'id_product = 2'? Мы просто возвращаем уникальные идентификаторы, отфильтрованные 'id_category в (1,15)' за вопрос. – Vinbot

+0

Как я могу использовать это внутри предложения левого соединения? –

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