Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need to combine common result of two select statements

Tags:

sql

i have to select the common coloumns c1 ,c2,c3 from result of two sql satements.

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

I need to select c1,c2,c3 all same and common found in both the result of query.

how could this be done...could anyone help please?

like image 843
Anup Avatar asked May 25 '10 14:05

Anup


3 Answers

remove the count(c3) from the select list, it can differ (the HAVING clause guarantees this) and the OP only wants to compare c1, c2 and c3. If the COUNT(c3) column is different, what rows can be in common? none or some, it will vary. Also remove the derived tables, they are not necessary. So try:

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
like image 72
KM. Avatar answered Sep 20 '22 22:09

KM.


I think INTERSECT will solve your problem. More Infos 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
like image 31
Daniel Engmann Avatar answered Sep 17 '22 22:09

Daniel Engmann


Have you tried joining the 2 queries with 'UNION'?

eg.

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
like image 42
Kylotan Avatar answered Sep 21 '22 22:09

Kylotan