Подтвердить что ты не робот

Выберите строки, имеющие 2 столбца равного значения

Рассмотрим следующую таблицу

C1    || C2  || C3  || C4
--------------------------
1     || a   || b   || 1
2     || a   || b   || 4
3     || b   || d   || 2
4     || b   || d   || 2

Вопрос 1: выберите все строки, в которых столбцы C2, C3, C4 имеют одинаковые значения, например. выберите строку 3 и строку 4 в приведенном выше примере.

Вопрос 2: выберите все строки, в которых столбец C4 имеет дубликаты, например. C4 имеет значение 2 в строке 3 и строке 4, поэтому выберите строки 3 и 4.

4b9b3361

Ответ 1

Вопрос 1:

SELECT ta.C1
      ,ta.C2
      ,ta.C3
      ,ta.C4
FROM [TableA] ta
WHERE (SELECT COUNT(*)
       FROM [TableA] ta2
       WHERE ta.C2=ta2.C2
       AND ta.C3=ta2.C3
       AND ta.C4=ta2.C4)>1

Ответ 2

В большинстве случаев это будет быстрее:

SELECT *
FROM table ta1
JOIN table ta2 on ta1.id != ta2.id
WHERE ta1.c2 = ta2.c2 and ta1.c3 = ta2.c3 and ta1.c4 = ta2.c4

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

Ответ 3

Select * from tablename t1, tablename t2, tablename t3 
where t1.C1 = t2.c2 and t2.c2 = t3.c3 

Похоже, это сработает. Хотя это не кажется эффективным способом.

Ответ 4

SELECT *
FROM my_table
WHERE column_a <=> column_b AND column_a <=> column_c

Ответ 5

select t.* from table t
    join (
        select C2, C3, C4
        from table
        group by C2, C3, C4
        having count(*) > 1
    ) t2
    using (C2, C3, C4);

Ответ 6

select * from test;
a1  a2  a3
1   1   2
1   2   2
2   1   2

select t1.a3 from test t1, test t2 where t1.a1 = t2.a1 and t2.a2 = t1.a2 and t1.a1 = t2.a2

a3
1

Вы можете попробовать одно и то же, используя Joins тоже.