2013-08-26 3 views
0

Мне нужно выполнить следующие действия:MySQL «В» состоянии с подзапроса

SELECT * FROM mp_sizes 
WHERE size_id IN(SELECT size_ids FROM mp_size_categories 
WHERE category_id = '3' AND sub_category_id = '5'); 

Когда я запускаю ниже запрос он вернуть мне 3 записи.

SELECT * FROM mp_sizes WHERE size_id IN(3,2,4); 

Также, когда я запускаю запрос, он показывает мне правильный результат.

SELECT size_ids FROM mp_size_categories 
WHERE category_id = '3' AND sub_category_id = '5'; 

Приведенный выше запрос дает результат 3, 2, 4.

Но когда я использую это в подпросе, он возвращает только одну запись. Он возвращает только данные о размере первого значения (3).

Как я могу получить результаты всех трех размеров (3, 2, 4)?

+1

SELECT * FROM mp_sizes a ВЛЕВОЕ ПРИСОЕДИНЕНИЕ mp_size_categories b ON b.size_ids = a.size_id ГДЕ B.category_id IN (3, 5); - Не тестировалось, надеюсь, это поможет. –

+0

Я не мог так использовать. Поскольку поле size_ids в таблице mp_size_categories является полем varchar. И у него нет ни одного целого числа, но у него есть все идентификаторы размера с запятой отдельно, как у 3,2,4 – siddiq

+0

у вас есть образец скрипта sql? –

ответ

0

Вы пробовали это, используя JOIN? (Что быстрее)

SELECT * FROM mp_sizes, mp_size_categories 
WHERE size_id = size_ids AND category_id = '3' 
AND sub_category_id = '5'; 
+0

Я считаю, что большинство людей предпочитают '... FROM mp_sizes JOIN mp_size_categories ON size_id = size_ids WHERE ...' (но это фактически не отвечает на вопрос OP). – Dukeling

+0

Как вы видите мой дополнительный запрос (SELECT size_ids FROM mp_size_categories WHERE category_id = '3' AND sub_category_id = '5') вернет строку как 3,2,4. Поскольку поле size_ids является полем varchar и имеет в нем значение 3,2,4. – siddiq

+0

Тогда вам, возможно, придется провести синтаксический анализ строк в PHP (или что-то еще). Я не знаю, можно ли извлекать значения 3, 2 и 4 из строки «3,2,4», используя только mysql. – Ragnar

0

Вместо того, чтобы использовать вложенный запрос, я думаю, вы должны использовать следующий запрос с Присоединяйтесь, чтобы получить тот же результат, и это должно быть даже быстрее, чем к югу от запроса:

select * from mp_sizes as mpsizes 
join mp_size_categories as mpsizecategories 
on mpsizes.size_id = mpsizecategories.size_ids 
where mpsizecategories.category_id = '3' 
AND mpsizecategories.sub_category_id = '5'; 
Смежные вопросы