我需要显示每位医生的可用时间,但我的代码没有返回任何内容 这是我的代码:
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");
这是表格的描述
+---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | Name | varchar(100) | NO | | NULL | | | CRM | varchar(20) | NO | | NULL | | | Tel | varchar(10) | YES | | NULL | | | Cel | varchar(10) | YES | | NULL | | | RG | varchar(40) | YES | | NULL | | | CPF | varchar(50) | YES | | NULL | | | Street | varchar(120) | YES | | NULL | | | num | varchar(7) | YES | | NULL | | | bairro | varchar(40) | YES | | NULL | | | city | varchar(70) | YES | | NULL | | | zip | varchar(13) | YES | | NULL | | | datanasc | varchar(20) | YES | | NULL | | | Especiality | varchar(100) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+
答案 0 :(得分: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;
这将为您提供所有未使用的插槽。
答案 1 :(得分:0)
除了查询的正确性(或不正确性)之外,您还有一些错误。
您引用其中一个表agenda_hours
和Agenda_Hours
,这可能会导致错误。根据{{3}}:
虽然数据库和表名在某些情况下不区分大小写 平台,您不应该使用给定的数据库或表 同一陈述中的不同案例。以下声明 将无法正常工作,因为它将表引用为
my_table
和。{MY_TABLE
:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
此外,您的字段appoitment_hour
似乎有拼写错误。它应该可能是appointment_hour
。因此,您可能会收到“未知列”错误。