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

consultar 2 tablas con exepcion

Estas en el tema de consultar 2 tablas con exepcion en el foro de Mysql en Foros del Web. Si tengo varios locales que trabajan en la misma ubicacion " Santiago " y el local con el ID ( Nº 8 ) responde una ...
  #1 (permalink)  
Antiguo 24/07/2012, 17:19
 
Fecha de Ingreso: julio-2012
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta consultar 2 tablas con exepcion

Si tengo varios locales que trabajan en la misma ubicacion " Santiago " y el local con el ID ( Nº 8 ) responde una de las preguntas del cliente, no le vuelva aparecer la misma pregunta al local con el ID ( Nº 8 ) pero si a los otros local porque no le han respondido..

tabla solicitud / tabla respuesta
-id_solicitud = 1 / -id_solicitud = 1
-id_ciudad / -id_local = 8
-datos... / -datos....


SELECT id_solicitud, nombre, apellido FROM solicitud WHERE = $id_ciudad
( asi puedo saber las solicitudes que son de santiago )

AHORA necesito algo asi

SELECT id_solicitud, nombre, apellido FROM solicitud WHERE = $id_ciudad NOT EXISTS(SELECT * FROM respuesta WHERE id_local = $id_local);

QUE LA SOLICITUD RESPONDIDA DEL LOCAL Nº 8 NO LE APARESCA DE NUEVO ESA PREGUNTA PERO SI A LOS LOCALES Nº 9 , 10 , 11 , 12 , 13 , ETC...

con la consulta que mostre es para darles la idea a lo que me refiero pero no esta bien escrito porque me da error de sintaxis.

GRACIASSSSSSSSSSS
  #2 (permalink)  
Antiguo 25/07/2012, 01:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consultar 2 tablas con exepcion

Te dan error las dos que muestras, no?

Código MySQL:
Ver original
  1. SELECT id_solicitud,
  2.              nombre,
  3.              apellido
  4. FROM solicitud
  5. WHERE id_ciudad=$id_ciudad;

Esto da las solicitudes de la ciudad $id_ciudad


Código MySQL:
Ver original
  1. SELECT s.id_solicitud,
  2.              s.nombre,
  3.              s.apellido,
  4.              r.id_local
  5. FROM solicitud s INNER JOIN respuesta r ON s.id_solicitud=r.id_solicitud
  6. WHERE s.id_ciudad=$id_ciudad;

Esto da las solicitudes de la ciudad $id_ciudad y los locales que SI han contestado.

Para obtener los que NO han contestado, faltan datos, no se puede obtener de una tabla cosas que NO estan en ella...

Para solucionar lo que pides falta una tabla locales, con TODOS los locales, y estos supongo que estarán en una ciudad....

Tabla Locales
id_local
id_ciudad
datos...

Código MySQL:
Ver original
  1. SELECT s.id_solicitud,
  2.              s.nombre,
  3.              s.apellido,
  4.              l.id_local
  5. FROM (solicitud s INNER JOIN locales l on s.id_ciudad=l.id_ciudad)
  6. WHERE s.id_ciudad=$id_ciudad;

Esto nos daria una lista delas solicitudes de $id_ciudad repetidas para cada local de $id_ciudad.

Ahora vinculamos las respuestas

Código MySQL:
Ver original
  1. SELECT s.id_solicitud,
  2.              s.nombre,
  3.              s.apellido,
  4.              l.id_local
  5. FROM (solicitud s INNER JOIN locales l on s.id_ciudad=l.id_ciudad)
  6. LEFT JOIN respuesta r ON s.id_solicitud=r.id_solicitud AND r.id_local=l.id_local
  7. WHERE s.id_ciudad=$id_ciudad
  8. AND r.id_local IS NULL;

Uso left join para seguir con todos los registros de la consulta anterior, y luego filtro por los que no tienen respuesta.

Si he entendido bien lo que intentas esto lo soluciona, si no lo he entendido deberias explicarte mas y mejor....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/07/2012 a las 01:16

Etiquetas: consultar, exepcion, select, tabla, 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 15:21.