Ответ 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
Рассмотрим следующую таблицу
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.
Вопрос 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
В большинстве случаев это будет быстрее:
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
Вы присоединяетесь к разным строкам, которые имеют одинаковые значения. Я думаю, это должно сработать. Исправьте меня, если я ошибаюсь.
Select * from tablename t1, tablename t2, tablename t3
where t1.C1 = t2.c2 and t2.c2 = t3.c3
Похоже, это сработает. Хотя это не кажется эффективным способом.
SELECT *
FROM my_table
WHERE column_a <=> column_b AND column_a <=> column_c
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);
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 тоже.