SQL:如何仅从同一列中选择重复的值?
!!!有一种方法可以通过拥有来解决这个问题,但是有没有其他简单的方法可以不用拥有来解决这个问题呢 假设我有一个表t1,它有两个关系a和bSQL:如何仅从同一列中选择重复的值?,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
-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乐意帮忙。如果这回答了您的问题,请通过左侧的复选标记接受它。