使用子查询时如何修复不明确的 SQL 列引用,并且别名已用于没有任何不明确的表/列?

问题描述 投票:0回答:1

这是我的查询,但我收到错误:

错误:列引用“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的学生的两条记录。查询需要从学生开始。

sql alias
1个回答
0
投票

这是因为子查询中的连接导致 select * 返回的结果集中存在多个 TUTOR_ID。这是不明确的,子查询需要知道哪个 TUTOR_ID(以及其他重复列)作为子查询 d 的结果集返回。

这可以通过更改全选来解决:

SELECT * FROM STUDENTS s2 

直接指定子查询所需的列:

SELECT t.TUTOR_ID, t.TUTOR_NAME, r.ROOM_NUMBER FROM STUDENTS s2
© www.soinside.com 2019 - 2024. All rights reserved.