2010-05-25 37 views
5

tôi phải chọn các cột màu phổ biến c1, c2, c3 từ kết quả của hai satl vuông.Cần kết hợp kết quả chung của hai câu lệnh chọ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 

tôi cần phải chọn c1, c2, c3 tất cả cùng và phổ biến được tìm thấy trong cả hai kết quả của truy vấn.

làm thế nào điều này có thể được thực hiện ... bất cứ ai có thể giúp đỡ?

+0

Bạn có thể sử dụng UNION để kết hợp hai truy vấn đến một – MUG4N

Trả lời

5

tháo count(c3) từ danh sách lựa chọn, nó có thể khác nhau (mệnh đề HAVING đảm bảo điều này) và OP chỉ muốn so sánh c1, c2 và c3. Nếu cột COUNT(c3) khác nhau, những hàng nào có thể là điểm chung? không hoặc một số, nó sẽ thay đổi. Ngoài ra loại bỏ các bảng có nguồn gốc, họ không cần thiết. Vì vậy hãy thử:

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

Vâng..Đây là những gì tôi muốn ..... Cảm ơn KM – Anup

0

Bạn có thể sử dụng các bảng có nguồn gốc và sau đó ghép chúng lại với nhau để có được kết quả mong muốn.

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

Bạn đã thử tham gia 2 truy vấn bằng 'UNION' chưa?

ví dụ:

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

vâng tôi đã cố gắng ... nhưng tôi muốn chỉ kết quả chung ..... như biệt – Anup

+0

UNION cho tất cả các hàng, OP chỉ muốn các các hàng phổ biến –

2

Tôi nghĩ INTERSECT sẽ giải quyết được sự cố của bạn. Thêm 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 
+0

INTERSECT cung cấp các hàng phổ biến, nhưng truy vấn này sẽ không hoạt động, hãy xem câu trả lời của tôi cho lý do. –

Các vấn đề liên quan