我正在实现这个功能:
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
答案 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课程