2010-05-25 14 views
5

tengo que seleccionar los colores comunes c1, c2, c3 del resultado de dos satements sql.Necesito combinar el resultado común de dos declaraciones de selección

1)

select c1, c2, c3,count(c3) from (select * from form_name 
where data_created >'1273446000' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>1 

2)

select c1, c2, c3,count(c3) from (select * from form_name 
where data_created>'1272236400' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>2 

necesito c1, c2, c3 todos iguales y comunes que se encuentran tanto en el resultado de la consulta.

¿cómo podría hacerse esto ... podría alguien ayudar por favor?

+0

Usted podría utilizar UNION para combinar las dos consultas a uno – MUG4N

Respuesta

5

retire la count(c3) de la lista de selección, que puede ser diferente (la cláusula HAVING garantiza esto) y el OP sólo quiere comparar C1, C2 y C3. Si la columna COUNT(c3) es diferente, ¿qué filas pueden ser comunes? ninguno o algunos, variará También elimine las tablas derivadas, no son necesarias. Así que trate de:

select 
    c1, c2, c3 
    from form_name 
    where data_created >'1273446000' and data_creazione<'1274569200' 
    group by c1,c2, c3 
    having count(c3)>1 
INTERSECT 
select 
    c1, c2, c3 
    from form_name 
    where data_created>'1272236400' and data_creazione<'1274569200' 
    group by c1,c2, c3 
    having count(c3)>2 
+0

Sí ... Esto es lo que quería ..... Gracias KM – Anup

0

Puede utilizar tablas derivadas y luego unirlas para obtener los resultados que desea.

select a.c1, a.c2, a.c3, a.acount, b.bcount 
From 
(select c1, c2, c3, count(*) as acount from (select * from form_name 
where data_created >'1273446000' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>1) a 
join 
(select c1, c2, c3, count(*) as bcount from (select * from form_name 
where data_created>'1272236400' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>2)b 
    on a.c1 = b.c1 and a.c2 = b.c2 and a.c3 = b.c3 
2

¿Ha intentado adjuntar las 2 preguntas con 'UNION'?

por ejemplo.

select c1, c2, c3,count(c3) from (select * from form_name 
where data_created >'1273446000' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>1  
union  
select c1, c2, c3,count(c3) from (select * from form_name 
where data_created>'1272236400' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>2 
+0

sí he intentado ... pero quiero sólo resultados comunes ..... como distinta – Anup

+0

UNIÓN da todas las filas, OP sólo quiere lo filas comunes –

2

Creo que INTERSECT resolverá su problema. Más información here.

select c1, c2, c3,count(c3) from (select * from form_name 
where data_created >'1273446000' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>1  
INTERSECT 
select c1, c2, c3,count(c3) from (select * from form_name 
where data_created>'1272236400' and data_creazione<'1274569200') 
group by c1,c2, c3 having count(c3)>2 
+0

INTERSECT proporciona filas comunes, pero esta consulta no funcionará, consulte mi respuesta para saber por qué. –