2012-10-11 27 views
1

我有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炸毁说:“这里的条件预计,临近“在上下文中指定非布尔类型的表达式类。

我加入的字段是int字段已经让我感到困惑的是缺少什么,我。我敢肯定,这是那些‘咄’的答案之一:)

+2

是'EE0-1Class'列?用括号括起'[EE0-1Class]'或双引号''EE0-1Class“'(你的DBMS是什么?)。减号字符被解析为减号。 –

+0

ouuuuh,你的列名是...异国情调。我想你的问题来自“ - ”和数字。我不知道你在使用什么sql衍生工具,但是试着把列放在\(例如\ e.EEO-1Class \'= ...),然后再次尝试你的运气。 – Najzero

回答

2

我想它可能是列名中的' - ',请尝试将它放在[]括号内[

2

esca请使用括号将列名称:EEO-1ClassEEO-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 
+0

看,我觉得这将是一个“杜”时刻。有道理。感谢您的答案! – user1738575

+0

@ user1738575欢迎您! –

+0

我看到你是新来的。如果您觉得答案可以解决问题,请点击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧版SO上。 –

3

您需要将该字段的名称放在方括号中。

因此改变......

ON e.EEO-1Class = jt.EEO-1Class 

进入

ON e.[EEO-1Class] = jt.[EEO-1Class] 

如果您的字段或表名称只包含字母数字字符(即AZ和0-9)和下划线_字符,然后你可以使用它没有方括号([])。

但是,只要你有不同的字符(并且很容易被SQL服务器混淆,如-),那么你需要将字段/表格放在方括号中。

但是,我会建议最重要的一点是,你只能使用字母数字字符(和下划线_字符)为您的字段和表名称,因为它被认为是更好的做法,并将删除发生这种类型的事情再次为你