写宿舍管理系统,做到宿管和楼栋关系时,新增一个宿管,一个宿管管理一栋楼,如果当前楼栋已选择,那么就不能再选,如图所示:
最开始使用的是:
SELECT DISTINCT b.building_num,b.TYPE,b.floors,b.id
FROM building b , keeping k WHERE b.id
NOT IN(SELECT k.building_id FROM keeping k);
发现当管理员为空,查询结果也为空,即没有任何记录存在,那么查询结果将为空,因为在语句中使用了子查询。这是因为子查询会排除掉在子查询结果中出现的值。
所以选择使用了左连接()和条件来找到在表中不存在的buildID。这样,无论表是否为空,都将返回正确的结果。
SELECT DISTINCT b.building_num, b.TYPE, b.floors, b.id
FROM building b
LEFT JOIN keeping k ON b.id = k.building_id
WHERE k.building_id IS NULL;