我有三个表:供应商(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中它不是这样的,你必须在所有内部都有一个查询。
答案 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
子句为您需要的每个值添加一个新条件。