Consulta de SQL

Necesito saber como puedo hacer una consulta en la que uno de los campos sale repetido, y yo no quiero que me los muestre.
Sería para que nos entendamos como hacer un select distinct pero que considere registros iguales aquellos que tengan igual ese campo y por tanto no me los muestre. Es para SQL estándar
Respuesta
1
Si la tabla no es muy grande... una doble consulta te soluciona la papeleta
select campo
from table
where
condiciones
and not exist select campo1
from table1
where
condiciones
and campo1 =campo
Lógicamente la tabla es la misma.
...
Gracias por tu interés pero la sentencia que me envías no la entiendo del todo. Pero tiene pinta de no funcionar ya que me parece que vienes a decir quiero todos los campos que cumplan esa condición menos esos campos.
De todos modos ya encontré una solución que consiste en un agrupamiento doble de esta manera
select ... group by ... having... (select... group by). De forma que el primer group by agrupa todos los campos y el segundo elimina los que repiten un determinado campo.
Gracias y un saludo

2 respuestas más de otros expertos

Respuesta
1
O no te he entendido bien (que puede ser, teniendo el cuenta el calor que estoy pasando), o quieres hacer el distinct, pero por un solo campo en lugar de por un registro (tupla) completa.. ¿no?
Pues en ese caso la consulta es
SELECT DISTINCT(campo) FROM TABLA.
Otra cosa es que quieras que te salga toda la tupla, pero claro... eso no es posible, pues si ambas filas son distintas... ¿cómo sabría el Gestor de BD cual de las dos coger?... necesitas una condición de restricción.
Exactamente, lo que quería era la consulta me sacara 10 campos por registro de los cuales uno solo se repetía, y que considerase que un registro se repite cuando encuentraotro con el mismo valor en ese campo. Lo he conseguido con un agrupamiento (group by ... having..(.. group by..)) doble. De todas maneras muchas gracias por tu interés
Respuesta
1
Lo que trato de decir es que con una copia podrás contabilizar el numero de ocurrencias de un dato encontrado haciendo uso de una unidad de programa. Ejemplo:
CREATE TABLE copia AS SELECT * FROM datos;
Luego creas un script (numregs.slq):
CREATE OR REPLACE FUNCTION numregs
(rfc IN VARCHAR2)
RETURN NUMBER
IS
nums NUMBER:=0;
BEGIN
SELECT COUNT(*)
INTO nums
FROM copia a
WHERE a.datrfc=rfc;
RETURN nums;
END;
/
luego en Sql*Plus:
( Para asentar la unidad de programa en la base de datos:)
START numregs.sql
(Luego lo ejecutas de este modo solo los que tienen una sola ocurrencia no duplicada:)
SELECT * FROM datos b WHERE numregs(b.datrfc)=1
Experimenta y ve si te funciona.
Muchas gracias. Lo he conseguido haciendo un agrupamiento doble (select... group by... having.. group by...). Lo que tu me sugieres está muy bien pero de ese modo me tengo que crear una nueva tabla, incluso creo entender que me sugieres crear un pl(La consulta la realizo desde Java). Pero eso sería complicarme demasiado. La manera que he encontrado es más sencilla y consume menos recursos de la bbdd. De todos modos muchas gracias por tu interés

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas