ВЫБЕРИТЕ Col1, Col2, Col3 ОТ Стола, ГДЕ у Column1 есть дубликаты

Я хочу показать все ряды стола, где у col1 есть дубликаты.

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 |    0 |    0 |
|    1 |    1 |    1 |
|    2 |    0 |    0 |
|    3 |    0 |    0 |
|    3 |    1 |    1 |
|    4 |    0 |    0 |
+------+------+------+

Результаты должны быть:

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 |    0 |    0 |
|    1 |    1 |    1 |
|    3 |    0 |    0 |
|    3 |    1 |    1 |
+------+------+------+

Я попробовал некоторые вопросы без удачи, таким образом, здесь я прошу вашу помощь.

0

6 ответы

В зависимости от вашей версии SQL-сервера можно использовать:

select col1, col2, col3
from
(
  select col1, col2, col3,
    count(col1) over(partition by col1) cnt
  from yourtable
) src
where cnt > 1

See SQL Fiddle with Demo

6
добавлено

Позвольте мне добавить еще одно различное решение. Если вы имеете pk колонка, которая имеет , УНИКАЛЬНЫЙ или PRIMARY KEY ограничение, можно использовать:

select col1, col2, col3
from  t1
where exists
  (select *
   from  t2
   where t2.col1 = t1.col1
     and t2.pk <> t1.pk
  ) ;
3
добавлено
select t.col1, t.col2, t.col3
from mytable t join (select col1 
                     from mytable 
                     group by col1 
                     having count(*) > 1) t2
  on t.col1 = t2.col1
3
добавлено
select col1, col2, col3
from  t1
where exists
  (select null
   from  t2
   where t2.col1 = t1.col1
   group by t2.col1
   having count(*) > 1)

sqlFiddle

2
добавлено

Если название таблицы - T5, тогда используют это:

SELECT COL1, COL2, COL3
FROM T5
WHERE COL1 IN
(
    SELECT COL1
    FROM T5
    GROUP BY COL1
    HAVING COUNT(COL1)>=2
)

Я проверил, и вышеупомянутое не должно использовать нестандартный SQL. Я предполагаю, что это имеет место для других.

2
добавлено
О чем это?: "Это не должно использовать нестандартный SQL". Все другие предоставленные ответы являются стандартным SQL, также.
добавлено автор ypercubeᵀᴹ, источник
Да, это имеет смысл; я редактирую ответ, чтобы упомянуть это.
добавлено автор A B, источник

Угадайте, что я слишком опаздываю.. но как насчет левого соединения...

ДЕМОНСТРАЦИОННЫЙ ПРИМЕР SQLFIDDLE

Вопрос:

SELECT DISTINCT x.col1, x.col2, x.col3 
FROM ab y
LEFT JOIN 
ab x
ON y.col1=x.col1 and ( y.col2<> x.col2
                    OR x.col3<>y.col3 )
where not (x.col3 is null)
and not (x.col2 is null)
;

Результаты:

COL1    COL2    COL3
1       0   0
1       1   1
3       0   0
3       1   1
1
добавлено
OP заявляет, что результаты должны быть этим...
добавлено автор bonCodigo, источник
Замораживание мозга @ypercube: $......... смотрел на него..
добавлено автор bonCodigo, источник
@ypercube, о, человек! большое спасибо это было им.. +1
добавлено автор bonCodigo, источник
Это не точно, что требуется: SQL-Fiddle-2
добавлено автор ypercubeᵀᴹ, источник
Вы согласовали мою скрипку (с различными данными, но вашим кодом)? Это doesn' t показывают эти 2 ряда с col1=1
добавлено автор ypercubeᵀᴹ, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)