簡體   English   中英

SQL:如何從同一列中僅選擇重復的值?

[英]SQL: how to select only repeated values from same column?

!!! 有一種方法可以使用HAVING解決此問題,但是還有其他簡單的方法可以在不使用HAVING的情況下解決此問題嗎?

假設我有一個表t1,其中有兩個關系a和b。

-a  b
-1  2
-2  1
-3  4
-4  9
-8  5
-5  2
-6  5

如何只打印B列中重復的案例(在這種情況下:2和5)?

如果您不希望使用HAVING子句,則可以使用子查詢:

select t1.a, t1.b
from yourtable t1
inner join
(
  select count(*) tot, b
  from yourtable
  group by b
) t2
  on t1.b = t2.b
where t2.tot > 1

請參閱帶有演示的SQL Fiddle

子查詢將用於獲取每個b值的計數。 然后,將結果聯接到表中,並過濾出計數大於1的所有記錄。

結果如下:

| A | B |
---------
| 1 | 2 |
| 8 | 5 |
| 5 | 2 |
| 6 | 5 |

除了已經很好的示例... HAVING的示例:

SELECT * FROM 
(
 SELECT col_a t1
   FROM stack_test
 ) a,
 (
 SELECT col_b t2
   FROM stack_test
  GROUP BY col_b
  HAVING Count(*) > 1
 ) b
 WHERE t1 = t2
 /

 SQL>

  T1   T2
  -------
  2     2
  5     5

您可以使用聚合或聯接來執行此操作。 我更喜歡前者,但這是一種方法:

select *
from t
where exists (select 1 from t t2 where t2.b = t.b and t2.a <> t.a)

當然,這假定當b值相同時, a值不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM