查找表中两个不同列之间的值

时间:2018-11-09 11:11:33

标签: mysql sql

表一

+----------------------+
|column A | Column B|
|   2     |    4    | 
|   3     |    5    |
|   1     |    2    |
|   1     |    2    |
|   8     |    7    |
+----------------------+

输出

+-------+
|1 | 2  |
|1 | 2  |
+-------+

我只想打印上述输出而没有COUNT,以及任何重复的记录示例?请帮助

4 个答案:

答案 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中,我们获得了columnAcolumnB的所有组合,这些组合具有多行({{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 );

Rextester Demo

答案 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);