Select varios campos con 1 en distinct

Mi problema es que debo obtener unos datos con una select y no se como conseguirlos.
Miren tengo la "tabla1" con los campos campo1, campo2, campo3, campo4.
Quiero obtener todas las tuplas de datos tales que el campo 3 sea siempre distinto; es decir, no me devolverá dos resultados cuyo campo3 sea el mismo.
He intentado usar el distinct pero el distinct mira que todos los campos sean distintos.
Si me pueden ayudar se lo agradeceré.
Ej. De lo que busco:
Campo1 campo2 campo3 campo4
Juan 18 verde España
Pedro 28 rojo Italia
Matias 22 verde Venezuela
La select debería devolver las dos primeras tuplas de datos ya que en la tercera se repite el campo 3.

2 respuestas

Respuesta
1
Me puedes indicar que base de datos usas por que con el distinct si seleccionas todos los campos pues te los muestra todos por que son diferentes pero si seleccionas solo el campo 3 te mostrara solo los dos registros osea select distict campo3 form tabla
Hola, la bbdd que uso es Oracle. El distinct lo he probado y no funciona ya que si alguno de los campos que mostramos en la select es distinto ya lo toma como una tupla distinta. Según tengo entendido no se puede hacer un distinct de algunos campos y otros no, sino que mira si alguno de los campos que estamos mostrando es distinto.
Es decir, no se puede select campo1, campo2, distinct campo3 , campo4....
Tendríamos que hacer select distinct campo1,campo2,campo3,campo4 y así,  no estariamos filtrando solo por el campo 3 que es lo que quiero, sino por los 4 campos...
Como quieres seleccionar todos los campos no te va a funcionar el distinct como ya lo habías comentado una alternativa es que te crees un bloque anomino de plsql y hagas ese validación usando variables auxiliares para comparar los datos y mostrar los campos que quieres se me ocurre eso por que con una sentencia normal no es factible hacerlo
Respuesta
1
(xxxxxx), el problema que se presenta aquí tal como dices es que el distinct debe tener todos los campos repetidos para no mostrar el registro lo cual es bastante lógico, porque supón que quieres eliminar el registro duplicado (campo3, "verde"). ¿Cómo puede saber la query que registro debe borrar? (¿El 1ero o el 3ero?, para la query los registros son diferentes y no tienen un criterio para elegir entre uno u el otro).
Entonces lo que habría que hacer es definir dicho criterio, te pongo un ejemplo meramente ilustrativo para que te hagas la idea:
Para registro duplicado en campo 3, seleccionar el menor registro del campo 2.
Esta query devolveria un unico registro dado el caso (pero deberias tener en cuenta la posibilidad de que se repita dicho registro en el campo 2, en tal caso la query no podria resolver).
Otra solucion es buscar el menor rowid, de esta forma ya no tendrias problemas de duplicidad de datos. Pero eso va a depender del origen de la consulta y del resultado que estes buscando.
Espero haber esclarecido tus dudas, cualquier cosa puedes volver a contactarte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas