表一
+----------------------+
|column A | Column B|
| 2 | 4 |
| 3 | 5 |
| 1 | 2 |
| 1 | 2 |
| 8 | 7 |
+----------------------+
输出
+-------+
|1 | 2 |
|1 | 2 |
+-------+
我只想打印上述输出而没有COUNT,以及任何重复的记录示例?请帮助
答案 0 :(得分:0)
在下面的行中怎么样
select * from t where columnA=1 and columnB=2
或
select columnA,columnB from t
group by columnA,columnB
having count(*)>1
或者您可以使用exists
select t1.* from t t1 where exists
(select 1 from t t2 where t2.columnA=t1.columnA
and t2.columnB=t1.columnB group by columnA,columnB
having count(*)>1
)
答案 1 :(得分:0)
您可能只想要重复的行。如果您的MySQL版本没有可用的窗口函数,则可以执行以下操作:
SELECT
t.*
FROM your_table AS t
JOIN (SELECT columnA, columnB
FROM your_table
GROUP BY columnA, columnB
HAVING COUNT(*) > 1) AS dt
ON dt.columnA = t.columnA AND dt.columnB = t.columnB
详细信息:在Derived table中,我们获得了columnA
和columnB
的所有组合,这些组合具有多行({{1 }})。
现在,我们只需加入此结果集回到主表,即可仅获取那些行。
注意:如果您只想获取这两列,则不需要此方法。如其他答案中所建议的,带有HAVING COUNT(*) > 1
的简单Group By
就足够了。但是,如果表中有更多列,则需要获取所有列,而不仅仅是所有列(用于确定重复项);您将需要使用这种方法。
答案 2 :(得分:0)
您可以将in
运算符与分组子查询一起使用:
select *
from tab
where ( columnA, columnB) in
(
select columnA, count(columnA)
from tab
group by columnA
);
或将self-join
用作:
select t1.columnA, t1.columnB
from tab t1
join
(
select columnA, count(columnA) as columnB
from tab
group by columnA
) t2
on ( t1.columnA = t2.columnA and t1.columnB = t2.columnB );
答案 3 :(得分:0)
如果表具有主列,我将使用EXISTS
:
SELECT t.*
FROM table t
WHERE EXISTS (SELECT 1 FROM table t1 WHERE t1.col1 = t.col1 AND t1.col2 = t.col2 AND t1.pk <> t.pk);