使用ALL与MySQL

时间:2013-12-29 17:09:31

标签: mysql

我有三个表:供应商(id,name ...),TypeOfServices(id,service ...)和SupplierService(supplierId,ServiceId)。

作为搜索输入,我有一个包含服务ID类型的列表。我可以有(1)或(1,3)或(1,2,3)。我需要一个MySQL查询,它将向我提供所有提供搜索服务的供应商(它也可以提供其他服务,但它必须提供搜索中的服务)。

我不能使用IN,因为IN(2,3)将返回具有serviceId 2 OR 3的供应商,我需要2 AND 3。

我和所有人都试过这样:

SELECT * FROM suppliers as s
INNER JOIN supplierservices as ss ON ss.SupplierId = s.Id
WHERE ss.ServiceId = ALL (SELECT id FROM typeofservices WHERE id IN (2, 3))

但它没有给我任何结果,我有一个供应商提供两种服务(ID为2和3)。我认为SQLServer接受像这样的ALL(2,3)这样的查询,但是在MySQL中它不是这样的,你必须在所有内部都有一个查询。

2 个答案:

答案 0 :(得分:3)

尝试

SELECT * FROM suppliers as s
INNER JOIN supplierservices as ss ON ss.SupplierId = s.Id
WHERE ss.ServiceId IN(2,3)
GROUP BY s.id
HAVING COUNT (DISTINCT ServiceId)=2

答案 1 :(得分:0)

您可以这样做:

SELECT s.*
FROM suppliers s INNER JOIN
     supplierservices ss
     ON ss.SupplierId = s.Id
GROUP BY s.id
HAVING sum(id = 2) > 0 and
       sum(id = 3) > 0;

只需为having子句为您需要的每个值添加一个新条件。