在MySQL中如何根据子选择"其中"环

时间:2017-11-19 18:01:16

标签: mysql database

我有3个数据库。

  1. bundles - 有关捆绑包的所有信息。
  2. bundle_itemsbundle_iditem_id) - 指定每个捆绑包中包含的项目。
  3. items - 有关这些项目的所有信息。
  4. 在一个声明中,我需要搜索10个bundles,其中仅包含可用的项目。

    items有一个名为available

    的布尔列

    如果捆绑中的某个项目不再可用,我显然不希望任何人看到该捆绑包,因为它无效。

    我还需要做一些其他的事情,比如计算所有项目的总成本(之后可以在php中执行此操作,但这不是真正的问题)

    实现这样的目标的最佳方法是什么?我很高兴完全改变我的数据库布局,找到有用的东西。

1 个答案:

答案 0 :(得分:0)

我们在三个表(子查询)之间进行简单的3连接,并将其用作WHERE子句。我们无法在子查询中进行限制,因为这将限制为10个订单项,而不是10个订单项。

子查询将获得包含至少一个不可用项的所有包,并且我们在外部选择中使用NOT IN排除那些

由于您没有发布商品和捆绑表的结构,我假设他们有相应的ID列

SELECT *
FROM  bundles
WHERE bundle_id NOT IN
                ( SELECT  b.bundle_id 
                  FROM    bundles b
                          JOIN bundle_items bi 
                              ON b.bundle_id = bi.bundle_id
                          JOIN items i
                              ON i.item_id = bi.bundle_id
                   WHERE  i.available = 0 )
LIMIT 10