0

我的 Select 命令有问题,首先,我需要显示与其他表上的 idHour 不同的所有时间,这是代码:

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

结果:

+----------+
| 小时 |
+----------+
| 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 |
+----------+
4

4 回答 4

2

试试这个方法:

SELECT DISTINCT Hours 
FROM agenda_hours A 
LEFT JOIN appoitment_hour B 
    ON (A.idHours = B.Hour)
WHERE B.Hour is null;
于 2013-08-24T22:02:35.797 回答
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
于 2013-08-25T03:31:47.247 回答
0

你想要的是类似的东西(是议程小时数的小时数吗?)

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

您遇到了问题,因为 JOIN 在给定 ON 条件的情况下尝试将表中的所有行与另一个表中的所有行匹配。所以即使一个小时已经在另一个表中,该行将与所有其他表匹配

于 2013-08-24T22:07:24.450 回答
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);
于 2013-08-24T22:11:35.137 回答