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

[SOLUCIONADO] Consulta con except

Estas en el tema de Consulta con except en el foro de Mysql en Foros del Web. Hola a todos, recurro en busca de vuestra ayuda. tengo esta estructura de base de datos, no se si será la más correcta. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 23/03/2017, 11:57
 
Fecha de Ingreso: diciembre-2015
Mensajes: 36
Antigüedad: 3 años, 11 meses
Puntos: 0
Consulta con except

Hola a todos, recurro en busca de vuestra ayuda.

tengo esta estructura de base de datos, no se si será la más correcta.

Código MySQL:
Ver original
  1. CREATE TABLE `citas` (
  2.   `id` int(10) NOT NULL,
  3.   `nombrePaciente` varchar(20) NOT NULL,
  4.   `dia` varchar(20) NOT NULL,
  5.   `hora` varchar(20) NOT NULL
  6. )
  7.  
  8.  
  9. INSERT INTO `citas` (`id`, `nombrePaciente`, `dia`, `hora`) VALUES
  10. (1, 'pepe', '2017-03-08', '23:00');
  11.  
  12.  
  13. CREATE TABLE `citasdadas` (
  14.   `paciente` int(10) NOT NULL,
  15.   `hora` time(2) NOT NULL
  16. )
  17.  
  18.  
  19.  
  20. INSERT INTO `citasdadas` (`paciente`, `hora`) VALUES
  21. (1, '23:00:00.00');
  22.  
  23.  
  24. CREATE TABLE `horas` (
  25.   `horas` time(2) NOT NULL
  26. )
  27.  
  28. INSERT INTO `horas` (`horas`) VALUES
  29. ('08:00:00.00'),
  30. ('09:00:00.00'),
  31. ('10:00:00.00'),
  32. ('11:00:00.00'),
  33. ('12:00:00.00'),
  34. ('13:00:00.00'),
  35. ('14:00:00.00'),
  36. ('15:00:00.00'),
  37. ('16:00:00.00'),
  38. ('17:00:00.00'),
  39. ('18:00:00.00'),
  40. ('19:00:00.00'),
  41. ('20:00:00.00'),
  42. ('21:00:00.00'),
  43. ('22:00:00.00'),
  44. ('23:00:00.00'),
  45. ('00:00:00.00');

bien, despues de ver la estructura de la base de datos, lo que necesito es hacer una consulta (había pensado con except, pero no se como hacerla) que lo que me haga sea en "citasdadas" comprobar las horas que ya están pilladas y restarselas (por decirlo de alguna manera) a la tabla de horas que es donde están todas las horas del día. Para que quiero hacer eso¿?? para que en mi formulario, hay un botón que dice horas disponibles, y haga un listado de las horas que no están pilladas y así poder asignar horas a las citas.

esta sería la consulta que había pensado

Código SQL:
Ver original
  1. SELECT hora FROM horas
  2.     EXCEPT
  3. (SELECT hora FROM horas)

gracias de ante mano.

Última edición por gnzsoloyo; 23/03/2017 a las 12:14 Razón: faltaba consulta except
  #2 (permalink)  
Antiguo 23/03/2017, 12:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Consulta con except

Hasta lo que recuerdo, MySQL no soporta la cláusula EXCEPT... Esa es de SQL Server (T-SQL).
En todo caso deberías analizar usar las condiciones de IN y NOT IN, o bien EXIST (https://dev.mysql.com/doc/refman/5.7...ubqueries.html)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 23/03/2017, 12:24
 
Fecha de Ingreso: diciembre-2015
Mensajes: 36
Antigüedad: 3 años, 11 meses
Puntos: 0
Respuesta: Consulta con except

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hasta lo que recuerdo, MySQL no soporta la cláusula EXCEPT... Esa es de SQL Server (T-SQL).
En todo caso deberías analizar usar las condiciones de IN y NOT IN.
gracias por tu respuesta, he buscado y efectivamente except no existe en mysql que es lo que usa phpmyadmin, he probado a hacerla con not in, pero no le veo mucho sentido a esta clausula, puesto que esa hora que ya está cogida si esta en el conjunto de horas y lo que yo quiero es que no aparezca

la consulta que he hecho ha sido esta y el resultado

Código:
select hora
from citasdadas
	not IN
(select hora
from horas) LIMIT 0, 25
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca 'not IN
(select hora
from horas) LIMIT 0, 25' en la linea 3
no se si habrá otra manera de hacerlo más eficiente, si es así estoy abierto a idea, eso fue lo que se me ocurrió a mi. si una hora está insertada en citasdadas pues que la reste de horas

Última edición por daviserraalonso; 23/03/2017 a las 12:38
  #4 (permalink)  
Antiguo 23/03/2017, 14:24
 
Fecha de Ingreso: diciembre-2015
Mensajes: 36
Antigüedad: 3 años, 11 meses
Puntos: 0
Respuesta: Consulta con except

ya lo he solucionado, la conulta es así

Código:
SELECT hora from horas where hora not in (SELECT hora from citasdadas)

Etiquetas: tabla
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 07:38.