Найти значения между двумя разными столбцами в таблице - PullRequest
0 голосов
/ 09 ноября 2018

стол один

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

выход

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

Я хочу напечатать только вышеприведенный вывод без COUNT, и какой-либо пример дубликата записи? пожалуйста помогите

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018

Я бы использовал 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); 
0 голосов
/ 09 ноября 2018

Возможно, вы захотите только те строки, которые являются дубликатами. Если в вашей версии 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 By с Having, как это предлагается в других ответах. Однако, если у вас есть больше столбцов в таблице, и вам нужно будет извлечь все из них, а не только столбцы (используемые для определения дубликатов); вам нужно будет использовать этот подход.

0 голосов
/ 09 ноября 2018

Вы можете использовать оператор 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

0 голосов
/ 09 ноября 2018

как насчет ниже, где cluase

   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
        ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...