2013-08-26 103 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';