MySQL Exclusive JOIN,包含一列的多个值

时间:2015-04-26 17:59:21

标签: mysql database relational-database

我在MySQL中有以下结构:

business
-------------
id
name


service
-------------
id
name


business_service
-----------------
business_id
service_id

我想选择除了所有指定服务之外的业务。如果我做这样的事情:

SELECT * FROM business LEFT JOIN business_service ON business_service.business_id = business.id WHERE business_service.service_id IN (1,2,3)

它将返回具有服务1,2或3的业务。我想要检索具有这三个服务的业务。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

假设表格business_service没有重复的行(您可以并且应该通过primary keyunique约束确保这一行),并且business_service.service_id从不采用{{ 1}}值(您也应该通过约束强制执行),您可以像这样处理问题:

null

如果您想识别那些只有特定服务子集的企业,那么您可以采取类似的方法:

select b.id, b.name
from (
    select business_id
    from business_service
    group by business_id
    having count(*) = (select count(*) from service)
  ) bs
  join business b
    on b.id = bs.business_id

在每种情况下,内联视图都标识具有预期服务数量的那些业务(按ID) - 与第一种情况下的总体表select b.id, b.name from ( select business_id from business_service where service_id in (1, 2, 3) group by business_id having count(*) = 3 ) bs join business b on b.id = bs.business_id 相同的服务数,或者服务ID的数量。第二种情况下的过滤器。主查询只是将其连接到表service以将业务名称与这些ID相关联。如果您只需要业务ID,那么内联视图可以单独用于此目的。