SQL:如何仅从同一列中选择重复的值?

SQL:如何仅从同一列中选择重复的值?,sql,Sql,!!!有一种方法可以通过拥有来解决这个问题,但是有没有其他简单的方法可以不用拥有来解决这个问题呢 假设我有一个表t1,它有两个关系a和b -a b -1 2 -2 1 -3 4 -4 9 -8 5 -5 2 -6 5 如何仅打印本例中重复的第2列和第5列中的案例?如果不需要HAVING子句,则可以使用子查询: select t1.a, t1.b from yourtable t1 inner join ( select count(*) tot, b from your

!!!有一种方法可以通过拥有来解决这个问题,但是有没有其他简单的方法可以不用拥有来解决这个问题呢

假设我有一个表t1,它有两个关系a和b

-a  b
-1  2
-2  1
-3  4
-4  9
-8  5
-5  2
-6  5
如何仅打印本例中重复的第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

子查询将用于获取每个b值的计数。然后将结果加入到表中,并过滤掉计数大于1的所有记录

结果如下:

| A | B |
---------
| 1 | 2 |
| 8 | 5 |
| 5 | 2 |
| 6 | 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

子查询将用于获取每个b值的计数。然后将结果加入到表中,并过滤掉计数大于1的所有记录

结果如下:

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

您可以通过聚合或联接来实现这一点。我更喜欢前者,但这里有一种方法:

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

当然,这是假设当b值相同时,a值不同。

您可以通过聚合或联接来实现这一点。我更喜欢前者,但这里有一种方法:

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

当然,这是假设当b值相同时,a值不同。

除了已经很好的例子之外。。。例如:

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 
(
 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

你为什么不用吃呢?你在用什么?SQL Server?MySQL?神谕DB2?等等,拥有正是为了这个目的——使用它有什么错?你能告诉我们你是如何通过拥有实现这个目的的吗?你为什么不想使用拥有?这只是我为自己想出的一项任务。“脑筋急转弯,”丹尼尔·凯利——我刚刚发布了一个例子……你为什么不使用“脑筋急转弯”?你在用什么?SQL Server?MySQL?神谕DB2?等等,拥有正是为了这个目的——使用它有什么错?你能告诉我们你是如何通过拥有实现这个目的的吗?你为什么不想使用拥有?这只是我为自己想出的一项任务。“脑筋急转弯,”丹尼尔·凯利——我刚刚发布了一个例子…@otGO很乐意帮忙。如果这回答了您的问题,请通过左侧的复选标记接受它。@otGO乐意帮忙。如果这回答了您的问题,请通过左侧的复选标记接受它。