2011-08-16 42 views
26

Hãy xem xét sau bảngChọn hàng có 2 cột giá trị như nhau

C1 || C2 || C3 || C4 
-------------------------- 
1  || a || b || 1 
2  || a || b || 4 
3  || b || d || 2 
4  || b || d || 2 

Câu hỏi 1: Chọn tất cả các hàng trong đó Cột C2, C3, C4 có giá trị tương đương ví dụ chọn hàng 3 và hàng 4 trong ví dụ trên.

Câu hỏi 2: Chọn tất cả các hàng trong đó cột C4 có trùng lặp, ví dụ: C4 có giá trị 2 trong dòng 3 và dòng 4, vì vậy chọn hàng 3 và 4.

Trả lời

41

Câu hỏi 1 truy vấn:

SELECT ta.C1 
     ,ta.C2 
     ,ta.C3 
     ,ta.C4 
FROM [TableA] ta 
WHERE (SELECT COUNT(*) 
     FROM [TableA] ta2 
     WHERE ta.C2=ta2.C2 
     AND ta.C3=ta2.C3 
     AND ta.C4=ta2.C4)>1 
+1

Bạn cần xóa vị từ trên C1 vì nó dường như là một ID duy nhất. –

+0

Điểm tốt @ a'r, chúc mừng – Curt

+1

Cảm ơn, nó hoạt động hoàn hảo – Rohit

-1
select * from test; 
a1 a2 a3 
1 1 2 
1 2 2 
2 1 2 

select t1.a3 from test t1, test t2 where t1.a1 = t2.a1 and t2.a2 = t1.a2 and t1.a1 = t2.a2 

a3 
1 

Bạn có thể thử điều tương tự sử dụng tham gia quá ..

+0

@DownVoter: Để đơn giản tôi đã giải thích bằng cách sử dụng 3 cột và tôi đã trả lời câu hỏi 1, Xin vui lòng giải thích những gì là sai? – Kracekumar

+0

Tôi đã không bỏ phiếu, nhưng truy vấn của bạn không hoạt động. Hãy thử với dữ liệu mẫu được cung cấp. Nó sẽ cần phải chỉ trả lại hàng 3 và 4. –

+0

thậm chí tôi đã không bỏ phiếu. Cảm ơn bạn đã thử. Câu trả lời đầu tiên làm việc cho tôi. – Rohit

0
select t.* from table t 
    join (
     select C2, C3, C4 
     from table 
     group by C2, C3, C4 
     having count(*) > 1 
    ) t2 
    using (C2, C3, C4); 
6

trên thực tế điều này sẽ đi nhanh hơn trong hầu hết các trường hợp:

SELECT * 
FROM table ta1 
JOIN table ta2 on ta1.id != ta2.id 
WHERE ta1.c2 = ta2.c2 and ta1.c3 = ta2.c3 and ta1.c4 = ta2.c4 

Yo u tham gia vào các hàng khác nhau có cùng giá trị. Tôi nghĩ rằng nó sẽ làm việc. Đúng nếu tôi sai.

2
Select * from tablename t1, tablename t2, tablename t3 
where t1.C1 = t2.c2 and t2.c2 = t3.c3 

Dường như điều này sẽ hiệu quả. Mặc dù không có vẻ như là một cách hiệu quả.

1
SELECT * 
FROM my_table 
WHERE column_a <=> column_b AND column_a <=> column_c 
+0

Tôi có thể xác nhận rằng tính năng này hoạt động. – aalaap

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