2012-08-01 82 views
0

我有两个表格,一个用于Strains,一个用于StoreStrains。商店销售菌株,因此可以在“StoreStrains”中为特定的strain_id添加多个条目。Mysql IN条件限制

我正在打一个电话来从菌株表中抓取所有菌株。然后我像“1,2,3,4,5”那样映射这些strain_id。然后,我正在做另一个SQL调用,以查找哪些商店有这些压力。

SELECT * FROM StoreStrains 
WHERE strain_id IN (strain_ids) 
LIMIT 5 

正如您所料,这将返回所有StoreStrains的strain_id为1-5。但是,如果其中3家商店承载相同的压力,我会返回8个结果,但我限制为5个。

在更大规模(500,000个StoreStrains的DB)中,只需将限制增加到“得到所有结果“根本不是一个好选择。所以我想知道是否有限制

WHERE strain_id IN (strain_ids) 

要1结果每?

我知道我可以只是做5个独立的SQL调用是这样的:

SELECT * FROM StoreStrains Where strain_id = ? LIMIT 1 

但我更希望如果可能的话这一切都发生在一个SQL调用。谢谢。

+0

如果你想要一个StoreStrain一个应变,什么是标准选择其中之一?应该显示哪个StoreStrain? – Devart 2012-08-02 06:30:30

回答

0

如果你想随便挑一家商店,然后做这个

Select strain_id, 
     (Select StrainStore.id 
     from StrainStore 
     Where StrainStore.strain_id = Strains.strain.id 
     Limit 1) 
From Strains 

但它可能更好地做到这一点

Select Strains.strain_id, GROUP_CONCAT(StrainStore.id) 
From Strains 
Join StrainStore 
    On (Strains.strain_id = StrainStore.strain_id) 
Group by Strains.strain_id