我正在为我正在进行的实验室准备2张桌子。表1是一个职位名称列表,其中包含描述,标题和状态字段,以及我需要能够与第二个表Employees一起加入的索引值。下面的查询看起来很简单,但它会抛出一个错误:
SELECT e.FirstName, e.LastName, e.Salary, jt.JobTitle, jt.JobDesc, jt.[Status]
From Employee e
JOIN Job_Title jt
ON e.EEO-1Class = jt.EEO-1Class
WHERE e.Salary BETWEEN 10000 AND 40000
它吹嘘e.EEO-1Class说“在预期条件的上下文中指定的非布尔类型的表达式,靠近'Class'。
我加入的字段已经是int字段,所以我对我所缺少的内容感到困惑。我确信这是“duh”答案之一:)
答案 0 :(得分:3)
您需要将字段名称放在方括号中。
所以改变......
ON e.EEO-1Class = jt.EEO-1Class
向
ON e.[EEO-1Class] = jt.[EEO-1Class]
如果您的字段或表名只包含字母数字字符(即AZ和0-9)和下划线_
字符,那么您可以使用它而不使用方括号([
和{{1} })。
但是只要你有一个不同的字符(并且很容易被SQL服务器混淆,例如]
),那么你需要将字段/表放在方括号中。
但是,除了其他所有内容之外,我建议您只使用字母数字字符(以及下划线-
字符)作为字段和表名,因为它被认为是更好的做法,并将删除此类型为你再次发生的事情
答案 1 :(得分:2)
我认为它可能是列名中的' - '。试着把它放在[]括号内。
答案 2 :(得分:2)
使用括号转义列名:EEO-1Class
和EEO-1Class
。由于-
符号,服务器执行减法。
SELECT e.FirstName, e.LastName, e.Salary, jt.JobTitle, jt.JobDesc, jt.[Status]
From Employee e
JOIN Job_Title jt
ON e.[EEO-1Class] = jt.[EEO-1Class] -- << this two columns.
WHERE e.Salary BETWEEN 10000 AND 40000