2013-08-26 79 views
0

我需要执行以下操作:MySQL的“IN”的条件与子查询

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种尺寸(3,2,4)的结果?

+1

SELECT * FROM mp_sizes a LEFT JOIN mp_size_categories b ON b.size_ids = a.size_id WHERE b.category_id IN(3,5); - 未经测试,希望这有助于 –

+0

我不能这样使用。因为mp_size_categories表中的size_ids字段是varchar字段。它没有一个整数,但它具有逗号分开的所有大小ids像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

我相信大多数人会喜欢'...从mp_sizes JOIN mp_size_categories ON size_id = size_ids WHERE ...'(但这实际上并不回答OP的问题)。 – Dukeling

+0

正如你看到我的子查询(SELECT size_ids从mp_size_categories WHERE category_id ='3'和sub_category_id ='5')将返回一个字符串为3,2,4。因为字段size_ids是一个varchar字段,并且它具有3,2,4作为值。 – siddiq

+0

然后你可能不得不在PHP中做一些字符串解析(或其他)。我不知道是否可以仅使用mysql从字符串“3,2,4”中提取值3,2和4。 – 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';