0

我有两张桌子,一张用于菌株,一张用于 StoreStrains。商店出售菌株,因此对于某个菌株 ID,“StoreStrains”中可以有多个条目。

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

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

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

在更大的范围内(在具有 500,000 多个 StoreStrain 的数据库中),仅仅增加“获取所有结果”的限制根本不是一个好的选择。所以我想知道是否有方式限制

WHERE strain_id IN (strain_ids)

每 1 个结果?

我知道我可以像这样执行 5 个单独的 SQL 调用:

SELECT * FROM StoreStrains Where strain_id = ? LIMIT 1

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

4

1 回答 1

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
于 2012-08-01T23:23:05.520 回答