Hola zedwarck:
Me agrada ver que lograste obtener la consulta que necesitabas por tu cuenta, pero de cualquier manera me gustaría comentarte que hay otras maneras para resolver tu problema y que resultarían en consultas más sencillas.
Este es una consulta típica hablando de Bases de Datos, y si investigas un poco en este mismo foro o si le preguntas a SAN GOOGLE te podrás encontrar distintas maneras de resolverlo. Alguna vez escuche a un forista hacer una analogía que se aplica bastante bien a este caso: "hay muchas maneras de matar una mosca, pero utilizar una pistola puede resultar excesivo".
Una de las maneras más sencillas de resolver la consulta sería aplicando la agrupación y la cláusula HAVING... observa este script:
Código MySQL:
Ver original+------+--------------+---------------+
| id | campoabuscar | camponumerico |
+------+--------------+---------------+
| 1 | 13 | 63 |
| 2 | 13 | 9 |
| 3 | 13 | 1 |
| 4 | 13 | 3 |
| 5 | 13 | 27 |
| 6 | 13 | 49 |
| 7 | 12 | 63 |
| 8 | 12 | 9 |
| 9 | 12 | 1 |
| 10 | 12 | 25 |
| 11 | 12 | 11 |
| 12 | 12 | 64 |
| 13 | 11 | 1 |
| 14 | 11 | 3 |
| 15 | 11 | 25 |
| 16 | 11 | 49 |
| 17 | 11 | 64 |
| 18 | 3 | 9 |
| 19 | 3 | 5 |
| 20 | 3 | 32 |
+------+--------------+---------------+
20 rows
in set (0.00 sec
)
+--------------+----------+
| campoabuscar
| COUNT(*) | +--------------+----------+
| 3 | 1 |
| 11 | 1 |
| 12 | 2 |
| 13 | 2 |
+--------------+----------+
Observa en primer lugar que en la cláusula IN estoy listando los elementos que realmente tengo que descriminar (1 y 9), esto elimina automáticamente todos los demás registros. Observa que la columna COUNT te muestra cuántos registros cumplen con la condición, en este caso los registros 3 y 11 tienen alguno de los dos criterios, pero los registros 12 y 3 cumplen con ambos.
Finalmente, utilizas la condición HAVING para filtrar estos registros:
Código MySQL:
Ver original+--------------+
| campoabuscar |
+--------------+
| 12 |
| 13 |
+--------------+
Si tienes necesidad de incrementar el número de elementos a buscar, lo unico que tendrías que hacer es incluir el elemento en el IN y poner en el valor del HAVING el número de elementos que integran el IN:
Código:
.....
WHERE camponumerico IN (1, 9, 12, 34)
.....
HAVING COUNT(*) = 4;
Dale un vistazo y nos comentas.
Saludos
Leo