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

nc1teljy  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(298)

表1

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

输出

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

我只想打印上面没有计数的输出,还有任何重复记录的例子?请帮忙

unhi4e5o

unhi4e5o1#

你可以用 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演示

bvpmtnay

bvpmtnay2#

在下面的地方怎么样

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
)

58wvjzkj

58wvjzkj3#

我会用 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);
zzlelutf

zzlelutf4#

您可能只需要那些重复的行。如果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

细节:在派生表中,我们得到 columnA 以及 columnB 有多行的( HAVING COUNT(*) > 1 ).
现在,我们只需将这个结果集连接回主表,只获取那些行。
注意:如果您只想获取这两列,则不需要这种方法。一个简单的 Group ByHaving 如其他答案所示,就足够了。但是,如果表中有更多的列,则需要获取所有列,而不仅仅是列(用于确定重复项);你需要使用这种方法。

相关问题