2011-08-16 11 views
26

Considere siguiente tablaseleccionar filas que tienen 2 columnas igual valor

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

Pregunta 1: seleccionar todas las filas en las que la columna C2, C3, C4 tienen valores iguales, por ejemplo, seleccione la fila 3 y la fila 4 en el ejemplo anterior.

Pregunta 2: seleccione todas las filas en las que la columna C4 tiene duplicados, p. C4 tiene el valor 2 en la fila 3 y la fila 4, así que seleccione la fila 3 y 4.

Respuesta

41

Pregunta 1 consulta:

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 
+1

Necesita eliminar el predicado en C1 ya que parece ser una ID única. –

+0

Buen punto @ a'r, ovaciones – Curt

+1

Gracias, funciona perfectamente – Rohit

-1
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 

Puede intentar lo mismo usando une también ..

+0

@DownVoter: Para simplificar, he explicado el uso de 3 columnas y respondí la pregunta 1, ¿podría explicar qué sucede? – Kracekumar

+0

No voté, pero su consulta no funciona. Pruébalo con los datos de muestra suministrados. Necesitará solo devolver las filas 3 y 4. –

+0

incluso yo no voté. Gracias por intentarlo. La primera respuesta funcionó para mí. – Rohit

0
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

en realidad esto iría más rápido en la mayoría de los casos:

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 

Yo te unes en diferentes filas que tienen los mismos valores. Creo que debería funcionar. Corrígeme si estoy equivocado.

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

Parece que esto funcionará. Aunque no parece una forma eficiente.

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

Puedo confirmar que esto funciona. – aalaap

Cuestiones relacionadas