Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cool sql para excluir algunos registros

Hola

necesito realizar una sentencia sql en donde de los integrantes de una tabla me excluya los que estan en otra tabla...???

como se realiza esto ???

las tablas son:

Cliente
Cli_Rut
Cli_Nombres
Cli_Apellidos

Excluido
Cli_Rut



Salu2
__________________
BlueSteel

Última edición por BlueSteel fecha: 30-06-2008 a las 16:10:06.
Responder Con Cita
  #2  
Antiguo 30-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Código SQL [-]
SELECT * FROM TABLA WHERE CAMPO NOT EXISTS(QUERY)

Código SQL [-]
SELECT * FROM TABLA WHERE CAMPO NOT IN(QUERY)

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 30-06-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa SELECT .. IN ... o SELECT... NOT IN ...

Código SQL [-]
  Select * from tabla1 where Campo1 NOT IN (select Campo2 from Tabla 2)

Se me adelantaton...
Hay que decir que debes taner algun campo común. En mi ejemplo, Campo1 y Campo2 deberían almacenar valores "concordantes"
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 30-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Talking

ok... muchas gracias...

me funcionó con esto

Código SQL [-]
SELECT * FROM Cliente WHERE Cli_Rut NOT IN(Select * From Excluidos)

intenté con el distinct, pero no me funcaba...

Salu2
__________________
BlueSteel
Responder Con Cita
  #5  
Antiguo 30-06-2008
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola, BlueSteel.
Prueba con la cláusula NOT EXISTS

Código SQL [-]
SELECT Cliente.*, Cli_Rut.*, Nombres.*, Apellidos.*
FROM Cliente
  INNER JOIN Cli_Rut
  ON (Cliente.[enlace_Cli_Rut]=Cli_Rut.[enlace_Cliente])
  INNER JOIN Nombres
  ON (Cliente.[enlace_Nombres]>=Nombres.[enlace_Cliente])
  INNER JOIN Apellidos
  ON (Cliente.[enlace_Apellidos]=Apellidos.[enlace_Cliente])
WHERE NOT EXISTS (SELECT Cli_Rut2.[ID_Cli_Rut]
                            FROM Cli_Rut Cli_Rut2
                            WHERE (Cli_Rut2.[ID_Cli_Rut] = Cli_Rut.[ID_Cli_Rut])
                            ORDER BY Cli_Rut2.[ID_Cli_Rut])

Con NOT IN, si la select principal devuelve muchos registros y la select secundaria tambien, puede tardar demasiado en mostrar la información, ya que por cada tupla de la select principal, se ejecuta la select secundaria...
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 30-06-2008 a las 16:19:21.
Responder Con Cita
  #6  
Antiguo 30-06-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola a todos!

Amigo Blue, no pude evitar sentirme atraido por la problemática. Y esto se debe al diseño de dicha tabla.

No debería criticar tu diseño, no es mi intensión traerte problemas... pero me ha resultado un tanto extraño el diseño.

¿Tiene algún otro propósito y uso la tabla excluídos? ¿En ambas tablas Cli_RUT es la clave primaria?

Lo primero que se me pasó por la cabeza es que: un cliente puede ser excluído una sola vez, por tanto existirá cuanto mucho la misma cantidad de clientes en ambas tablas. Y esto conduce a una relación 1 a 1.

Al no conocer a detalles tu DER, no debería arriesgarme a decir algo. Pero mi naturaleza curiosa me lleva a esto.

Si dicha tabla no tiene otro fin más que de llevar un registro de excluído, lo que yo haría, de acuerdo a un primer análisis, es ponerla como un campo (booleano) más en la tabla cliente y la consulta queda simplemente:

Código SQL [-]
select tus_campos
from Clientes
where Excluido = 'NO'

Perdona que me haya metido en el tema.... es que me llama la curiosidad.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 30-06-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Wink

Hola Delphius...

en realidad, en cuanto al diseño de las tablas tenia el campo de la tabla Excluidos como Exc_Rut, pero como no me funcionaba lo cambie por Cli_Rut... pense que era que el campo debia llamarse de la misma forma...(intente con el distinct , bueno.. un gran error)

En cuanto al diseño de las tablas, lo que pasa es que es para el mismo sorteo que estoy realizando (donde pregunte por el Random)... lo que pasa es que hoy me dicen que dentro de los clientes (o dueños de abonos) no pueden participar 2 personas, que son el Gerente del Club y el Presidente del Club y entre ellos son como 10 numeros...)

Con lo de poner alguna condición al campo para que este o no excluida, bueno, tambien es carta, es que no lo habia pensado (eso de estar pensando y trabajando en puro realizar conexiones de redes y wifi en la ultima semana me ha borrado la logica de programación)

Bueno... realizaré unas pruebas

Salu2
__________________
BlueSteel
Responder Con Cita
  #8  
Antiguo 30-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En cuanto a lo que observa Delphius, si bien estoy de acuerdo con él, me gustaría comentar que en muchas ocasiones debemos manipular directamente las tablas y realizar consultas que muy posiblemente no haríamos dentro del sistema.

Por dar un ejemplo: tengo un tabla de solicitantes (a lo que sea) en la cual tengo -de hecho- el campo excluido. Por una u otra razón que va más allá del proceso normal del sistema, debo excluir varios de esos solicitantes. Posiblemente reciba la lista de éstos en un archivo de excel o de texto.

Lo que hago entonces, es importar la lista a una tabla temporal (la tabla excluidos) y hacer una actualización de la tabla de solicitantes:

Código SQL [-]
update solicitante
set excluido = 1
where clave in (select clave from excluido)

O sea, que aún contando con un campo propicio, he requerido de una tabla auxiliar y una consulta ad-hoc para la ocasión.

// Saludos
Responder Con Cita
  #9  
Antiguo 30-06-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
En cuanto a lo que observa Delphius, si bien estoy de acuerdo con él, me gustaría comentar que en muchas ocasiones debemos manipular directamente las tablas y realizar consultas que muy posiblemente no haríamos dentro del sistema.

Por dar un ejemplo: tengo un tabla de solicitantes (a lo que sea) en la cual tengo -de hecho- el campo excluido. Por una u otra razón que va más allá del proceso normal del sistema, debo excluir varios de esos solicitantes. Posiblemente reciba la lista de éstos en un archivo de excel o de texto.

Lo que hago entonces, es importar la lista a una tabla temporal (la tabla excluidos) y hacer una actualización de la tabla de solicitantes:

Código SQL [-]update solicitante set excluido = 1 where clave in (select clave from excluido)


O sea, que aún contando con un campo propicio, he requerido de una tabla auxiliar y una consulta ad-hoc para la ocasión.

// Saludos
Hola Roman,
A ver si entiendo tu punto de vista... tal vez se deba a que mi cerebrito ya se está quedando sin baterias...

¿Entonces tu dices que en ciertas ocasiones es bueno o recomendable tener esas tablas para poder realizar operaciones, en forma externa al sistema, que no fueron contempladas en el desarollo del sistema? ¿A eso quieres llegar?

Perdona que te pregunte esa burrada, pero es que ando dormido.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 30-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No es que sea ni bueno ni recomendable, pero muchas veces hay que hacer "talacha", cosas que, como dices, no están contempladas en el sistema y que muy posiblemente ni valga la pena considerar porque sólo se dan esporádicamente. O sea, que hay que meterse con el SQL a pelo, por fuera de todas nuestras consultas bien planeaditas del sistema.

// Saludos
Responder Con Cita
  #11  
Antiguo 30-06-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
No es que sea ni bueno ni recomendable, pero muchas veces hay que hacer "talacha", cosas que, como dices, no están contempladas en el sistema y que muy posiblemente ni valga la pena considerar porque sólo se dan esporádicamente. O sea, que hay que meterse con el SQL a pelo, por fuera de todas nuestras consultas bien planeaditas del sistema.

// Saludos
Ahora entiendo.

¿Quién no tuvo que hacer alguna que otra "talacha" alguna vez? Si pudiera contarlas las que tuve que hacer yo...

Disculpa que te lo haya preguntado, y quitarte unos minutos... ando medio desenchufado y las ideas se me están durmiendo... creo que me hace falta una pequeña siesta y un poco de combustible al estómago.

Una pregunta más para el recuerdo:
Código Delphi [-]
inc(Delphius.Preguntas_tontas);

momento... no se puede usar inc para propiedades!
Código Delphi [-]
with Delphius do
  Preguntas_tontas := Preguntas_tontas + 1;



Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Es posible con SQL sumar algunos registros de un SELECT? nefy SQL 4 10-10-2007 23:32:24
Excluir algo dentro de un bucle with do ... gluglu Varios 4 23-02-2007 01:06:00
Alguna propiedad en algunos registros que no me los deje MODIFICAR? Patricio Conexión con bases de datos 2 18-08-2005 15:39:19
Algunos Chistes para.... JELIRM Humor 0 22-07-2005 00:47:59
Eliminar algunos registros con sql miguelb SQL 4 19-09-2003 16:11:43


La franja horaria es GMT +2. Ahora son las 10:30:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi