2013-08-24 59 views
0

我需要顯示每個醫生avaible了幾個小時,但我的代碼沒有返回 這裏是我的代碼:選擇命令不返回任何

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 |  | 
+---------------+--------------+------+-----+---------+-------+ 
+3

我們不能在沒有看到任何實際數據的情況下給您提供幫助 –

+0

也許嘗試將'appoitment_hour'更改爲'appointment_hour'? – edsioufi

回答

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; 

這將讓你的所有未使用的插槽。

0

除了查詢的正確性(或不正確)之外,還有一些錯誤。

請參閱表agenda_hoursAgenda_Hours之一,這可能會導致錯誤。按照MySQL docs

儘管數據庫和表名不區分一些 平臺上敏感的,你不應該指的是使用相同的語句中 不同的情況下,給定的數據庫或表。下面的語句 ,因爲它是指一個表既作爲my_tableMY_TABLE不行

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

而且,你的領域appoitment_hour似乎有一個錯字。它應該是可能是appointment_hour。所以你可能會收到「未知列」錯誤。