2013-08-24 75 views
0

我有我的選擇命令的問題,首先,我要表明,來自idHour其他表不同的所有時間,這裏的代碼:JOIN返回所有的數據從表

SELECT DISTINCT Hours 
FROM agenda_hours A 
JOIN appoitment_hour B 
    ON (A.idHours <> B.Hour); 

結果:

 
+----------+ 
| Hours | 
+----------+ 
| 07:00 | 
| 07:30 | 
| 08:00 | 
| 08:30 | 
| 09:00 | 
| 09:30 | 
| 10:00 | 
| 10:30 | 
| 11:00 | 
| 11:30 | 
| 12:00 | 
| 12:30 | 
| 13:00 | 
| 13:30 | 
| 14:00 | 
| 14:30 | 
| 15:00 | 
| 15:30 | 
| 16:00 | 
| 16:30 | 
| 17:00 | 
| 17:30 | 
| 18:00 | 
| 18:30 | 
| 19:00 | 
| 19:30 | 
| 20:00 | 
+----------+ 
+0

你爲什麼用'MySQL'標籤這個**的d **'SQL Server' –

回答

2

試試這個方法:

SELECT DISTINCT Hours 
FROM agenda_hours A 
LEFT JOIN appoitment_hour B 
    ON (A.idHours = B.Hour) 
WHERE B.Hour is null; 
+0

但是沒有一個idHours爲空,這是表的主鍵 – Vinicius

+0

我檢查'Hour'不是'idHours' – Parado

+1

@Vinicius如果你看看這個[SO問題/答案]( http://stackoverflow.com/questions/9770366/difference-in-mysql-join-vs-left-join)你會看到,如果該值存在於第一個表中,那麼在「LEFT JOIN」上,聯接值可能爲空但不是第二張桌子。因此,這將返回'agenda_hours'表中不在'appoi [n] tment_hour'表中的所有小時數。我也相信這是你想要的。 +1 – amaster

0

你想要什麼是一樣的東西(從agenda_h小時我們的?)

SELECT DISTINCT Hours 
FROM agenda_hours 
WHERE idHours NOT IN (SELECT DISTINCT Hour FROM appoitment_hour) 

您有問題導致JOIN試圖在表中的所有行與所有其他給定的接通狀態的行相匹配。因此,即使一個小時已經在其他表,該行會匹配所有其它

+2

如果'appoitment_hour.Hour'允許'NULL',那麼應該避免使用'NOT IN'。例如:'SELECT'Test'WHERE 1 NOT IN(2,3,NULL);' –

0

根據該表包括Hours列,您可以使用此查詢:

SELECT /*DISTINCT*/ Hours 
FROM agenda_hours A 
WHERE NOT EXISTS(SELECT * FROM appoitment_hour B WHERE A.idHours = B.Hour); 

或者這一個:

SELECT /*DISTINCT*/ Hours 
FROM appoitment_hour B 
WHERE NOT EXISTS(SELECT * FROM agenda_hours A WHERE A.idHours = B.Hour); 
0

對於非獲取匹配的記錄

SELECT b.Hour, a.idHours FROM appoitment_hour b 
LEFT JOIN agenda_hours a ON b.Hour = a.idHours 
GROUP BY b.Hour HAVING a.idHours IS NULL