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. hola tengo dos tablas una llamada pedidos y la otra llamada auditoria en ambas tengo el campo num_factura la idea que tengo es que si ...

  #1 (permalink)  
Antiguo 15/03/2010, 14:10
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 3 meses
Puntos: 4
sql no mostrar registro si aparece en las 2 tablas.

hola
tengo dos tablas

una llamada pedidos
y la otra llamada auditoria

en ambas tengo el campo num_factura

la idea que tengo es que si en ambas tablas esta la misma factura no me la muestre en el select

como podria hacer una consulta asi?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 15/03/2010, 14:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Cita:
la idea que tengo es que si en ambas tablas esta la misma factura no me la muestre en el select
Que campos esperarías mostrar en la select?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 15/03/2010, 14:32
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.

num_factura


pero solo si la factura no esta en ambas tablas al mismo tiempo.. si llegara a estar en ambas tablas el registro no se debe mostrar.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 15/03/2010, 14:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Código SQL:
Ver original
  1. SELECT t1.num_factura FROM
  2. (SELECT num_factura FROM pedidos
  3. UNION ALL
  4. SELECT num_factura FROM auditoria)t1
  5. GROUP BY t1.num_factura
  6. HAVING COUNT(*) =1;

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 15/03/2010, 14:58
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
me equivoque con los campos que deseo mostrar
son : id_enpoderde, num_factura,num_pedido, fecha_factura, fecha_recepcion, estado_factura,id_llamada, id_canal, anulada, id_contacto


la coloque asi:


Código MySQL:
Ver original
  1. SELECT t1.num_factura FROM
  2. (SELECT id_enpoderde, num_factura,num_pedido, fecha_factura, fecha_recepcion, estado_factura,id_llamada, id_canal, anulada, id_contacto
  3. FROM pedidos
  4. SELECT num_factura
  5. FROM auditoria) t1
  6. GROUP BY t1.num_factura

pero me marco error algo esta mal escrito?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 15/03/2010, 15:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

El union all exige que el numero de campos a mostrar en la primera consulta corresponda a la segunda.

Estos campos que mencionas a cual de las tablas pertenecen?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 15/03/2010, 15:11
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.

todos los campos mencionados pertenecen a la tabla pedidos


en la tabla auditoria solo esta num_factura, id_enpoderde
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #8 (permalink)  
Antiguo 15/03/2010, 15:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Lexus...
Mira como acomodas la consulta que te doy a tus necesidades.

La que te doy hace exactamente lo que pides cuando se llama el having después del group by.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 16/03/2010, 08:07
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
mira que lo adapte asi
pero no encuentro la razon de poruqe me marca errror


Código MySql:
Ver original
  1. SELECT t1.num_factura, t1.id_enpoderde, t1.num_factura, t1.num_pedido, t1.fecha_factura, t1.fecha_recepcion, t1.estado_factura,t1.id_llamada, t1.id_canal, t1.anulada, t1.id_contacto
  2. (SELECT id_enpoderde, num_factura, num_pedido, fecha_factura, fecha_recepcion, estado_factura,id_llamada, id_canal, anulada, id_contacto
  3. FROM pedidos
  4. WHERE id_enpoderde = "&id_personal&" and id_areaenpoderde = "&id_areaenpoderde&"
  5. SELECT num_factura
  6. FROM auditoria
  7. WHERE id_enpoderde = "&id_personal&") t1
  8. GROUP BY t1.num_factura
  9. HAVING count(*) = 1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #10 (permalink)  
Antiguo 16/03/2010, 08: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.

bueno mira, la simplifique un poco para evitar errores y primero hacerla funcionar..


la deje asi.. pero ahora no me meustra ningun resultado.

la idea es que si tiene facturas en la tabla pedidos
me debe mostrar las facturas
pero si llega a estar en pedidos y en auditoria entonces no me muestra ninguna factura.

en este caso no me esta mostrando ninguna factura y si las hay en la tabla pedidos


Código MySQL:
Ver original
  1. SELECT t1.num_factura
  2. FROM  
  3. (SELECT  num_factura
  4. FROM pedidos
  5. WHERE id_enpoderde = "&id_personal&" and id_areaenpoderde = "&id_areaenpoderde&"
  6. SELECT num_factura
  7. FROM auditoria
  8. WHERE id_enpoderde = "&id_personal&") t1
  9. GROUP BY t1.num_factura
  10. HAVING count(*) = 1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #11 (permalink)  
Antiguo 16/03/2010, 08:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

El problema debe estar en el where que utilizas.

Yo probé la solución y creo que es lo que quieres.

Código MySQL:
Ver original
  1. mysql> select *from pedido;
  2. +------+
  3. | id   |
  4. +------+
  5. |    4 |
  6. |    5 |
  7. |    6 |
  8. +------+
  9. 3 rows in set (0.02 sec)
  10.  
  11. mysql> select *from factura;
  12. +------+
  13. | id   |
  14. +------+
  15. |    1 |
  16. |    2 |
  17. |    4 |
  18. |    3 |
  19. +------+
  20. 4 rows in set (0.00 sec)

Entre estas dos tablas, el unico registro que no debería mostrar es el 4, ya que se encuentra en ambas tablas.

si se aplica la consulta

Código MySQL:
Ver original
  1. mysql> SELECT t1.id FROM
  2.     -> (SELECT id FROM pedido
  3.     -> union ALL
  4.     -> SELECT id FROM factura)t1
  5.     -> GROUP BY t1.id
  6.     -> HAVING count(*) =1;
  7. +------+
  8. | id   |
  9. +------+
  10. |    1 |
  11. |    2 |
  12. |    3 |
  13. |    5 |
  14. |    6 |
  15. +------+
  16. 5 rows in set (0.00 sec)

Efectivamente excluye el 4 que se encuentra repetido.

Con esto, ya puedes mirar la forma de acomodar el resto de campos sin que te interfiera con esta condición.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 16/03/2010, 08:22
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.

ok perfecto si eso es lo que necesito
la adaptare a mi necesidad y te comento
muchas gracias...
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #13 (permalink)  
Antiguo 16/03/2010, 08:30
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 definitivamente deberia quedar asi.

en teoria tengo dos tablas con facturas
y en ambas tablas hay un id_enpoderde lo qeu uiere decir que yo le paso un parametro con el id_personal el id de un empleado.

entonces me selecciona las factruas qeu estan en poder de una persona.

y si el numero de la factura y el id_enpoderde coinciden en ambas tablas. entonces no las muestra.
si esta en la de pedidos solamente si..

pero yo le tengo que pasar el id_enpoderde como parametro.

la deje asi:

ya no me marca error pero tampoco me muestra resultados.


Código MySQL:
Ver original
  1. SELECT t1.num_factura
  2. (SELECT num_factura
  3. FROM pedidos
  4. WHERE id_enpoderde = "&id_personal&"
  5. UNION ALL    
  6. SELECT num_factura
  7. FROM auditoria
  8. WHERE id_enpoderde = "&id_personal&")  t1  
  9. GROUP BY t1.num_factura  HAVING count(*) =1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #14 (permalink)  
Antiguo 16/03/2010, 08:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Prueba así

Código MySQL:
Ver original
  1. SELECT t1.num_factura
  2. (SELECT num_factura, id_enpoderde
  3. FROM pedidos
  4. UNION ALL    
  5. SELECT num_factura,id_enpoderde
  6. FROM auditoria
  7. )  t1  
  8. WHERE t1.id_enpoderde = "&id_personal&"
  9. GROUP BY t1.num_factura  HAVING count(*) =1
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #15 (permalink)  
Antiguo 16/03/2010, 08:54
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.

la estoy probando asi:

se demora mas o menos 5 segundos en ejecutarse ya aue gtengo como 300 mil facturas..

y al final no muestra nada. aunque si deberia mostrar 6 facturas que tengo con ese id_enpoderde


Código MySQL:
Ver original
  1. SELECT t1.num_factura
  2. (SELECT num_factura, id_enpoderde
  3. FROM pedidos
  4. SELECT num_factura,id_enpoderde
  5. FROM auditoria )  t1  
  6.  WHERE t1.id_enpoderde = 36
  7.  GROUP BY t1.num_factura  
  8.  HAVING count(*) =1
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #16 (permalink)  
Antiguo 16/03/2010, 09:40
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.

definitrivamente no me funciono

no habra otra forma de hacerlo?

depronto con dos select

uno que seleccione todo lo que no esta dentro del otro select?
con un select ....NOT IN (select.....) o algo asi
la verdad no soy muy bueno con sql.
te agradeceria una ultima ayudita.. sino mirare otras opciones
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #17 (permalink)  
Antiguo 16/03/2010, 09:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

lexus...

La verdad, los condicionales que usas en el where no deberían tener problemas.
Sin probar directamente la consulta no puedo hacer mucho desde aca.

Como ves en el ejemplo, la consulta funciona, pero para darte una solución certera, necesitaría tener una replica exacta de tus tablas para hacer internamente pruebas y determinar que es lo que está pasando.

Una solución con NOT IN ademas de consumir muchos recursos con gran numero de registros, solo te compararía una de las tablas y no las 2 como lo hace la solución que te doy.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #18 (permalink)  
Antiguo 16/03/2010, 09:51
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.

si lo malo es que la soluicion que me das funciona hasta que le meto el where ahi ya no me muestra ningun registro

aun habiendolos..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #19 (permalink)  
Antiguo 16/03/2010, 10:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

lexus si ponemos esto.

Código MySQL:
Ver original
  1. mysql> SELECT t1.id FROM
  2.     -> (SELECT id FROM pedido where id=3
  3.     -> UNION ALL
  4.     -> SELECT id FROM factura where id=3)t1
  5.     -> GROUP BY t1.id
  6.     -> HAVING count(*) =1;
  7. +------+
  8. | id   |
  9. +------+
  10. |    3 |
  11. +------+
  12. 1 row in set (0.00 sec)
  13.  
  14. mysql>

a mi me funciona.

Fijate que es básicamente lo mismo que tratas de hacer.

Asegurate de la existencia de los registros.

Ahora bien, debes tener en cuenta que si esa consulta con esa condición se repite en las 2 tablas, no va a mostrar nada, ya que el having lo va a filtrar.

Por ejemplo...
Si el where lo ponemos en el 4(Registro que no se debe mostrar) no nos va a aparecer nada.

Código MySQL:
Ver original
  1. mysql> SELECT t1.id FROM
  2.     -> (SELECT id FROM pedido where id=4
  3.     -> UNION ALL
  4.     -> SELECT id FROM factura where id=4)t1
  5.     -> GROUP BY t1.id
  6.     -> HAVING count(*) =1;
  7. Empty set (0.00 sec)
  8.  
  9. mysql>
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #20 (permalink)  
Antiguo 16/03/2010, 11:30
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

que pasa si usas

Código MySQL:
Ver original
  1. SELECT t1.num_factura, t1.id_enpoderde
  2. (SELECT num_factura, id_enpoderde
  3. FROM pedidos
  4. UNION ALL    
  5. SELECT num_factura,id_enpoderde
  6. FROM auditoria
  7. )  t1
  8. GROUP BY t1.num_factura  

a ver que pasa.... lo mas probable es que no tenga dato para comparar con la instruccion SQL
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo

Última edición por omar1977; 16/03/2010 a las 11:31 Razón: sin where primero
  #21 (permalink)  
Antiguo 17/03/2010, 13:57
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.

la hice asi..

en la tabla pedidos hay muchos registros

y en la tabla auditoria hay solo 2
entre los cuales se repite al menos una vez.
pero no me muestra absolutamente nada. siendo que si hay registros.



SELECT t1.id_enpoderde FROM
(SELECT id_enpoderde
FROM pedidos
WHERE id_enpoderde=36
UNION ALL
SELECT id_enpoderde
FROM auditoria WHERE id_enpoderde=36) t1 GROUP BY t1.id_enpoderde
HAVING count(*) =1;

en ete caso deberia no mostrar los que tienen id_enpoderde = 36 que en mi ejemplo es uno.
pero si deberia mostrar las demas facturas que son muchisimas..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #22 (permalink)  
Antiguo 17/03/2010, 14:23
danicuco
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Si lo unico que necesitas es sacar registros de una tabla cuyo identificador (en este caso num_fatcura) no exista en la otra puedes usar tanto la clausula EXISTS o IN
En nuestro caso nos vendra a dar el mismo resultado ambas formas...

te dejo unos ejemplos... estas consultas deben ser rápidas ya que supongo que num_factura será la clave_principal de la tabla pedido y sino es asi usa siempre sus claves para este tipo de subconsultas siempre ayudaran al coste

Código:
SELECT pedidos.num_factura 
FROM pedidos
WHERE NOT EXISTS (SELECT auditoria.num_factura FROM auditoria)

Código:
SELECT pedidos.num_factura 
FROM pedidos
WHERE pedidos.num_factura NOT IN (SELECT auditoria.num_factura FROM auditoria)
saludos
  #23 (permalink)  
Antiguo 17/03/2010, 14:30
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.

si asi esta bien pero el problema viene cuando deseo agregarle een where
id_enpoderde = 36 tanto en pedidos como en auditoria.. com oseria la forma correcta de escribirlo en el not exists o en el Not in?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #24 (permalink)  
Antiguo 18/03/2010, 11:05
danicuco
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

SELECT pedidos.num_factura
FROM pedidos
WHERE NOT EXISTS (SELECT auditoria.num_factura FROM auditoria WHERE auditoria.id_enpoderde = 36)
AND pedidos.id_enpoderde = 36
  #25 (permalink)  
Antiguo 18/03/2010, 12:22
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.

Si no he entendido mal, en la tabla pedidos están todos los posibles números de factura, y es en auditoria donde hay recogidas sólo algunas facturas. Si lo que buscas es las que no están en ambas, yo usaría esto
Código MySQL:
Ver original
  1. SELECT * FROM pedidos
  2.  LEFT JOIN auditoria ON auditoria.num_factura = pedidos.num_factura
  3.  WHERE auditoria.num_factura IS NULL AND (pedidos.id_enpoderde = 36 OR auditoria.id_enpoderde = 36)

No lo he probado. Naturalmente, en lugar de * pon los campos que quieres que te muestre.

si en auditoria pudiera haber números de factura que no se dieran en pedidos, podrías hacer otra cosa, pero primero dinos si esto te sirve.
Observarás que he puesto OR en lugar de AND. La razón es que si hago la relación con AND y busco los nulos, no encontrará ninguno, al menos con esos criterios.

Última edición por jurena; 18/03/2010 a las 15:10
  #26 (permalink)  
Antiguo 18/03/2010, 19:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sql no mostrar registro si aparece en las 2 tablas.

Jurena yo había pensado en un left join pero no tomé la solución por ese lado, al ignorar los registros que se encuentran en la tabla de la derecha que se encuentran una sola vez.

Si mysql soportara el full join sería ideal.

Si mal no recuerdo, vi en algún lado como simulan el full join en mysql.

Sin embargo... La solución que te doy está probada y tienes que estar haciendo algo mal al no funcionarte.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #27 (permalink)  
Antiguo 19/03/2010, 03:00
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.

huesos52,
creo que esta tuya, que es la que me dices, debe funcionar y tiene sentido para mí:
SELECT t1.id FROM
-> (SELECT id FROM pedido WHERE id=3
-> UNION ALL
-> SELECT id FROM factura WHERE id=3)t1
-> GROUP BY t1.id
-> HAVING count(*) =1;

no he probado ninguna, la verdad, pero, si es como dices, y en auditoria puede haber facturas que no están en pedidos, yo también intentaría esto, que tiene la ventaja de que evita un GROUP BY:
Código MySQL:
Ver original
  1. SELECT  T1.FACTURA, T1.ENPODERDE FROM
  2. ((SELECT  pedidos.num_factura FACTURA, pedidos.id_enpoderde ENPODERDE FROM pedidos
  3.  LEFT JOIN auditoria ON pedidos.num_factura = auditoria.num_factura
  4.  WHERE auditoria.num_factura IS NULL AND pedidos.id_enpoderde = 36)
  5.  (SELECT auditoria.num_factura, auditoria.id_enpoderde FROM auditoria
  6.  LEFT JOIN pedidos ON auditoria.num_factura = pedidos.num_factura
  7.  WHERE pedidos.num_factura IS NULL AND auditoria.id_enpoderde = 36))T1

No lo he probado.

Última edición por jurena; 19/03/2010 a las 03:05
  #28 (permalink)  
Antiguo 19/03/2010, 09:41
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 gracias..
en pedidos siempre habran facturas.
en auditoria solo habran algunas facturas y seran repetidas en pedidos pero no al contrario..
voy a poner imagenes de como esta llena la tabla pedidos

como esta llena la tabla auditoria


como veran
si le digo que me oculte las num_facturas que estan repetidas tanto en pedidos como en auditoria donde id_enpoderde =1
deberia ocultar de pedidos los registros con num_factura (JCQ27104, JCQ27101, JCQ27058) y mostrar las demas facturas que hayan en la tabla pedido diferente a esas que encontro alla en auditoria con ese id_enpoderde.

me hago entender un poco mejor?

adjunto imagens aqui.


Tabla pedidos




Tabla Auditoria



resultado de la consulta


__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 19/03/2010 a las 09:59
  #29 (permalink)  
Antiguo 19/03/2010, 13:54
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.

Lexus,
veo que no coinciden los id_enpoderde de audotoria y pedidos, por lo que de ocultar la factura tendrás que ocultar ese número de factura en todos los casos.
SELECT 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)
  #30 (permalink)  
Antiguo 19/03/2010, 14:14
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 antes ke nada muchas gracias por la paciencia y la colaboracion

ya me retorno facturas.. pero necsito meterle un group by en el resultado ya qye mis facturas como salen varias veces necesito qeu se agrupen por num_factura.
donde debo meter el group by?

adjunto la imagen para illustrar.. debe salir una sola vez cada factura.
es un poco lenta y pesada esta consulta.

__________________
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 22:08.