Meditando un poco tu problema, me encontré con algo que, yo supongo, puede ser lo que buscas, pero que requiere una aclaración:
La sentencia de ejemplo que nos has puesto es imposible de resolver tal y como la planteas, porque si usas una tabla CLIENTES, y buscas un campo IDCLIENTE, estamos suponiendo que ese campo es PRIMARY KEY, y por tanto jamás habrá dos entradas de diferente IDCLIENTE para el mismo cliente. Eso sería absurdo.
Ahora bien, supongamos una tabla de algún tipo, digamos PEDIDOS, que si puede tener pedidos del mismo artículo de diferentes clientes, y de diferentes artículos del mismo cliente.
En este caso si lo que quiero es saber qué clientes han comprado solamente tres tipos de artículos y nada más que esos tres, eso se puede hacer:
Código sql:
Ver originalSELECT idArticulo, idCliente, NombreCliente
FROM Pedido INNER JOIN Cliente USING(idCliente)
WHERE idArticulo IN (1, 2, 7)
GROUP BY idArticulo, idCliente;
Esto nos devuelve una tabla en que por cada artículo (comprendido entre tres IDs posibles) y cliente hay una sola línea. A este resultado le realizo una cuenta adicional, donde pido que me devuelva aquellos clientes que compraron los tres, caso que se cumple si y sólo si tengo hasta tres registros por Cliente (uno por cada artículo):
Código sql:
Ver originalSELECT idCliente, NombreCliente
FROM
(SELECT idArticulo, idCliente, NombreCliente
FROM Pedido INNER JOIN Cliente USING(idCliente)
WHERE idArticulo IN (1, 2, 7)
GROUP BY idArticulo, idCliente) T1
GROUP BY idCliente
HAVING COUNT(*)=3;
Quiero que quede claro lo que dije antes: El modelo de consulta que propones al principio resulta absurdo si usas una tabla CLIENTE en la que esperas que haya más de una PRIMARY KEY por cada Cliente. Una PK es única y sólo identifica a un cliente.