2012-08-15 6 views
5

Digamos que tengo una tabla hacer una unión entre dos tablas ... de esta manera:equivalente MySQL de la cláusula IN() haciendo lógica Y es en cambio

id_product | id_category 
----------------- 
11 | 22 
11 | 33 
12 | 22 
12 | 33 

quiero conseguir id_products (distinta) de acuerdo con una lista de ID de categorías buscadas.

Si utilizo la cláusula IN(), la lista de id_categories usa un OR lógico.

¿Cómo puedo hacer que una consulta SELECT tenga AND lógicos para la lista de id_categ presentada ??

Ejemplo: Quiero que todos los id_products pertenecientes a la categoría 22 Y 33 (y posiblemente más 5+ Fu identificaciones.)

que consideran que esta respuesta: Using MySQL IN clause as all inclusive (AND instead of OR) ... pero la consulta es la mezcla más de 1 tabla ... Solo quiero una consulta en una sola tabla, la unión uno.

+0

¿Cómo puede una categoría ser igual a 22 y 33 al mismo tiempo? – Kermit

+0

Hice la misma pregunta hace un tiempo: http://stackoverflow.com/questions/11157772/sql-query-to-find-products-matching-a-set-of-categories – Tchoupi

+0

@njk It's a table. .. – hsanders

Respuesta

6

la lectura de su enlace, creo que sería algo así como

select id_product 
from yourTable 
where id_category in (--your List goes Here) 
group by id_product 
having count(distinct id_category) = NumberOfElementsOfYourList 

se debe utilizar = aunque sólo quiere conseguir que la id_category, pero no otros id_category. Si no es así, utilice> =

+1

Cambié 'COUNT (distinct id_product)' a 'COUNT (distinct id_category)' en tu cláusula 'HAVING' ...' COUNT (distinct id_product) 'siempre será 1 para cada grupo id_product. – Arth

+0

que acaba de salvar mi día, hoy. :-) – Krenor

1
select id_product 
from your_table 
where id_category in (22, 33) 
group by id_product 
having count(distinct id_category) = 2 

Usted puede agregar una cláusula having que cuenta los id_category 's que se encuentran. Si busca 5 ID, por ejemplo, debe cambiar 2 en 5 en la cláusula having.

+0

ElVieejo fue más rápido, creo, pero gracias! – ecchymose

Cuestiones relacionadas