【问题标题】:Select on Join error could not be boundSelect on Join 错误无法绑定
【发布时间】:2014-05-26 05:52:19
【问题描述】:

我正在实现这个功能:

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

【问题讨论】:

    标签: sql sql-server select outer-join


    【解决方案1】:

    错误来自尝试在查询之外的代码中使用查询中的值。 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
    

    【讨论】:

      【解决方案2】:

      我不确定,如果我了解您要完成的工作。您都会收到此错误,因为您的 if 语句超出了 Users.NTID 和 Courses.Faculty 字段的范围。

      如果您想将用户表上的记录标记为学生/教师,您可以尝试此查询。它只是在 select 中获取您的 if 语句。

      SELECT DISTINCT Users.NTID, CASE WHEN Courses.Faculty IS NULL THEN 'Faculty' ELSE 'Student' END AS PersonType 来自用户 LEFT OUTER JOIN Courses ON Users.NTID=Courses.Faculty

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-15
        • 2012-02-14
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2020-08-13
        • 2015-07-01
        • 1970-01-01
        相关资源
        最近更新 更多