这是我的查询,但我收到错误:
错误:列引用“TUTOR_ID”不明确”
SELECT
s1.STUDENT_NAME,
d.TUTOR_NAME,
d.ROOM_NUMBER
FROM
STUDENTS s1
JOIN
(
SELECT * FROM STUDENTS s2
JOIN TUTORS t
ON
s2.TUTOR_ID = t.TUTOR_ID
JOIN ROOMS r
ON
t.ROOM_ID = r.ROOM_ID
AND r.ROOM_STATUS = 'ACTIVE'
ORDER BY
t.NEXT_AVAILABLE_TIME
LIMIT 1
) d
ON
s1.TUTOR_ID = d.TUTOR_ID
模糊错误背后的机制是什么?我不明白当每个表都有一个别名并且列在引用时都使用其表的别名时,我是如何获取它的。
此查询的目标是从本质上限制结果记录,以便它仅返回每个房间的学生/导师的一种组合。所以如果有10个学生,10个导师,2个房间,它只会返回有导师和room_ids的学生的两条记录。查询需要从学生开始。
这是因为子查询中的连接导致 select * 返回的结果集中存在多个 TUTOR_ID。这是不明确的,子查询需要知道哪个 TUTOR_ID(以及其他重复列)作为子查询 d 的结果集返回。
这可以通过更改全选来解决:
SELECT * FROM STUDENTS s2
直接指定子查询所需的列:
SELECT t.TUTOR_ID, t.TUTOR_NAME, r.ROOM_NUMBER FROM STUDENTS s2