0

我需要显示每位医生的可用时间,但我的代码没有返回任何内容这是我的代码:

SELECT DISTINCT Hours
FROM agenda_hours, doctor
WHERE Agenda_Hours.idHours NOT IN (SELECT DISTINCT appoitment_hour.Hour FROM appoitment_hour)
AND Doctor.Name IN (SELECT Doctor.Name FROM Doctor Where name = "Name");

这是表的描述

+---------------+--------------+------+-----+----- ----+-------+
| 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 |
+---------------+--------------+------+-----+----- ----+-------+
| 编号 | 整数(11) | 否 | 优先级 | 空 | |
| 姓名 | varchar(100) | 否 | | 空 | |
| 客户关系管理 | varchar(20) | 否 | | 空 | |
| 电话 | varchar(10) | 是 | | 空 | |
| 细胞 | varchar(10) | 是 | | 空 | |
| RG | varchar(40) | 是 | | 空 | |
| 公积金 | varchar(50) | 是 | | 空 | |
| 街道 | varchar(120) | 是 | | 空 | |
| 编号 | varchar(7) | 是 | | 空 | |
| 拜罗 | varchar(40) | 是 | | 空 | |
| 城市| varchar(70) | 是 | | 空 | |
| 拉链 | varchar(13) | 是 | | 空 | |
| 数据库 | varchar(20) | 是 | | 空 | |
| 特产 | varchar(100) | 是 | | 空 | |
+---------------+--------------+------+-----+----- ----+-------+
4

2 回答 2

1

您的查询在小时数和医生之间进行交叉连接,然后查找不在小时数列表中的小时数。当然它不会返回任何东西。

我想你想要这样的东西:

select DoctorHour.*
from (select d.Name, a.hour
      from Doctor d cross join
           (select distinct hour from Appointment) a
     ) DoctorHour left outer join
     Appointment a
     on a.name = DoctorHour.name and
        a.hour = DoctorHour.hour
where a.name is null;

这将为您提供所有未使用的插槽。

于 2013-08-24T22:38:10.237 回答
0

除了查询的正确性(或不正确性)之外,您还有一些错误。

您参考了其中一张表agenda_hoursAgenda_Hours这可能会导致错误。根据MySQL 文档

尽管在某些平台上数据库和表名不区分大小写,但您不应在同一语句中使用不同的大小写来引用给定的数据库或表。以下语句不起作用,因为它同时引用了 asmy_table和 as 的表MY_TABLE

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

此外,您的字段appoitment_hour似乎有错字。应该appointment_hour。_ 因此,您可能会收到“未知列”错误。

于 2013-08-24T22:41:53.277 回答