选择加入错误无法绑定

时间:2014-04-11 22:05:26

标签: sql sql-server select outer-join

我正在实现这个功能:

DECLARE @Type AS VARCHAR(20)
SET @Type='Student'
SELECT Users.NTID, @Type
    FROM Users
        LEFT OUTER JOIN Courses
        ON Users.NTID=Courses.Faculty

        GROUP BY Users.NTID

        IF (Users.NTID=Courses.Faculty) 
        BEGIN
         SET @Type='Faculty'
        END

这是我得到的错误

Msg 4104, Level 16, State 1, Line 10
The multi-part identifier "Users.NTID" could not be bound.
Msg 4104, Level 16, State 1, Line 10
The multi-part identifier "Courses.Faculty" could not be bound.

如果我不添加此项,则会将所有行显示为学生

IF (Users.NTID=Courses.Faculty) 
            BEGIN
             SET @Type='Faculty'
            END

2 个答案:

答案 0 :(得分:0)

错误来自于尝试在查询外的代码中使用查询中的值。 if语句不是查询的一部分。

我认为你想要的是这样的东西,获取Courses表中有匹配记录的用户,以及没有匹配记录的用户:

select
  Users.NTID, 'Student'
from
  Users
  left join Courses on Users.NTID = Courses.Faculty
where
  Courses.Faculty is null

union all

select
  Users.NTID, 'Faculty'
from
  Users
  inner join Courses on Users.NTID = Courses.Faculty
group by
  Users.NTID

答案 1 :(得分:0)

我不确定,如果我明白你想要完成什么。这两个错误都是因为你的if语句超出了Users.NTID和Courses.Faculty字段的范围。

如果要将Users表上的记录标记为学生/教师,可以尝试此查询。它只是在select中找到你的if语句。

  

SELECT DISTINCT Users.NTID,Courses.Faculty IS NULL,' Faculty' ELSE'学生' END AS PersonType   来自用户       关于Users.NTID = Courses.Faculty

的LEFT OUTER JOIN课程