Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

sql no mostrar registro si aparece en las 2 tablas.

Estas en el tema de sql no mostrar registro si aparece en las 2 tablas. en el foro de Mysql en Foros del Web. ¿Has probado así? SELECT pedidos.num_factura FROM pedidos WHERE pedidos.num_factura NOT IN (Select pedidos.num_factura FROM pedidos INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura WHERE auditoria.id_enpoderde = ...

  #31 (permalink)  
Antiguo 19/03/2010, 15:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

¿Has probado así?
SELECT pedidos.num_factura FROM pedidos WHERE pedidos.num_factura NOT IN (Select pedidos.num_factura FROM pedidos INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura WHERE auditoria.id_enpoderde = 1) GROUP BY pedidos.num_factura

Quizás será más rápida así:

SELECT pedidos.num_factura FROM pedidos WHERE pedidos.num_factura NOT IN (Select auditoria.num_factura FROM auditoria WHERE auditoria.id_enpoderde = 1) GROUP BY pedidos.num_factura

Podemos hacer una consulta tal vaz algo más rápida con LEFT JOIN

SELECT pedidos.num_factura FROM pedidos LEFT JOIN (Select auditoria.num_factura FAC FROM auditoria WHERE auditoria.id_enpoderde = 1)t1 ON pedidos.num_factura = t1.FAC WHERE auditoria.num_factura IS NULL GROUP BY pedidos.num_factura


No lo he probado. Por cierto,imagino que tendrás indexado los campos auditoria.id_factura y pedidos.id_factura. Si no es así, seguro que ganas velocidad indexando esos campos

Última edición por jurena; 19/03/2010 a las 16:11
  #32 (permalink)  
Antiguo 23/03/2010, 08:53
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

hola
la estoy haciendo asi ya me muestra facturas
pero no esta mostrando las que son..
nose si estoy haciendo algo mal


SELECT pedidos.num_factura
FROM pedidos
WHERE pedidos.num_factura
NOT IN (Select pedidos.num_factura
FROM pedidos
INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
WHERE pedidos.id_enpoderde = 1 and pedidos.id_areaenpoderde = 3 AND pedidos.tipo_documento = 1)
GROUP BY pedidos.num_factura
Order by pedidos.id desc
limit 0,100


si los campos los tengo indexados. y necesito hacer limit tambien ya que hago paginaciones .

que sera que estoy hacinedo mal? depronto lo qeu pongo en negrita porque no corresponde a esa tabla?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 23/03/2010 a las 09:00
  #33 (permalink)  
Antiguo 23/03/2010, 09:23
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

bueno le hice una modificacion
nose si este bien o sea bien hecho.
pero aparentemente me funciona..

ahora como podria hacer un conteo de esas facturas retornadas?
intente poner el select count(*) en varias partes pero no me cuenta el total de registros retornados..



SELECT pedidos.num_factura
FROM pedidos
WHERE pedidos.id_enpoderde = 13 and pedidos.id_areaenpoderde = 2 AND pedidos.tipo_documento = 1 ANd pedidos.num_factura
NOT IN (Select pedidos.num_factura
FROM pedidos
INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
WHERE auditoria.id_enpoderde = 13)
GROUP BY pedidos.num_factura
Order by pedidos.id desc
limit 0,100
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #34 (permalink)  
Antiguo 23/03/2010, 10:13
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Listo ya dspues de probar muchas veces ya me funciona bien

publico las respuestas aqui.

asi muestro los datos

Código MySQL:
Ver original
  1. SELECT pedidos.id_enpoderde, pedidos.num_factura, pedidos.num_pedido, pedidos.fecha_factura, pedidos.fecha_recepcion, pedidos.estado_factura, pedidos.id_llamada, pedidos.id_canal, pedidos.anulada, pedidos.id_contacto
  2. FROM pedidos
  3. WHERE  pedidos.id_enpoderde = "&id_personal&"  and pedidos.id_areaenpoderde = "&id_areaenpoderde&"   AND pedidos.tipo_documento = 1 ANd pedidos.num_factura
  4. NOT IN (Select pedidos.num_factura
  5. FROM pedidos
  6. INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
  7. WHERE auditoria.id_enpoderde = "&id_personal&" )
  8. GROUP BY pedidos.num_factura
  9. Order by pedidos.fecha_recepcion desc
  10. limit 0,100


y asi hago el conteo..

Código MySQL:
Ver original
  1. SELECT count(distinct(pedidos.num_factura)) as total
  2. FROM pedidos
  3. WHERE  pedidos.id_enpoderde = "&id_personal&"  and pedidos.id_areaenpoderde = "&id_areaenpoderde&"   AND pedidos.tipo_documento = 1 ANd pedidos.num_factura
  4. NOT IN (Select pedidos.num_factura
  5. FROM pedidos
  6. INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
  7. WHERE auditoria.id_enpoderde = "&id_personal&" )
  8.  limit 0,1


muchisimas gracias a todos los ke me ayudaron y me dieron una mano
gracias . ya parece funcionar tal y como lo necesito y de una velocidad moderadamente bien.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #35 (permalink)  
Antiguo 06/05/2010, 13:19
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Hola a todos
al final termine usando este codigo..
pero hoy me dijeron que es exageradamente lento.

hay alguna forma de hacerlo que haga lo mismo pero mas rapido ?


Código MySQL:
Ver original
  1. SELECT pedidos.id_enpoderde, pedidos.num_factura, pedidos.num_pedido, pedidos.fecha_factura, pedidos.fecha_recepcion, pedidos.estado_factura, pedidos.id_llamada, pedidos.id_canal, pedidos.anulada, pedidos.id_contacto
  2. FROM pedidos
  3. WHERE  pedidos.id_enpoderde = 13 and pedidos.id_areaenpoderde = 3   AND pedidos.tipo_documento = 1 ANd pedidos.num_factura NOT IN (Select pedidos.num_factura
  4. FROM pedidos
  5. INNER JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
  6. WHERE auditoria.id_enpoderde = 13)
  7. GROUP BY pedidos.num_factura
  8. Order by pedidos.fecha_recepcion desc
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Etiquetas: registro, sql, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:15.