C#中SQL查询出错:使用SELECT JOIN WHERE OR

时间:2015-06-09 09:18:35

标签: c# sql .net sql-server

SQL对我来说还是比较新的,但我已经通过我所做的研究产生了这个。

这是我的sql命令:

"SELECT Array_ID 
 FROM Array_Location JOIN 
      Obj_Type.Type_ID ON Array_Location.Obj_Type 
 WHERE (Obj_Type.Object = 'CIRCLE') 
    OR (Obj_Type.Object = 'POLYGON');"

这是我的错误

  

在预期条件的上下文中指定的非布尔类型的表达式,接近' WHERE'

这是一个语法问题,但我对解决方案不确定

我有两张桌子:

CREATE TABLE [dbo].[Obj_Type] (
[Type_ID] INT  NOT NULL,
[Object]  TEXT NOT NULL,
CONSTRAINT [PK_OBJ_TYPE] PRIMARY KEY CLUSTERED ([Type_ID] ASC)
);

CREATE TABLE [dbo].[Array_Location] (
[Array_ID]   INT NOT NULL,
[Obj_Type]   INT NOT NULL,
[Element_ID] INT NOT NULL,
CONSTRAINT [Array_Location_fk0] FOREIGN KEY ([Obj_Type]) REFERENCES [dbo].[Obj_Type] ([Type_ID]) ON UPDATE CASCADE
);

由于

6 个答案:

答案 0 :(得分:2)

<强>原因:

您在JOIN中遇到语法错误:

Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type

<强>解决方案:

SELECT Array_ID 
FROM Array_Location JOIN 
     Obj_Type ON Obj_Type.Type_ID = Array_Location.Obj_Type 
WHERE (CONVERT(nvarchar(50),Obj_Type.Object) = N'CIRCLE') 
   OR (CONVERT(nvarchar(50),Obj_Type.Object) = N'POLYGON');

答案 1 :(得分:1)

这是您想要的,您还需要转换为TEXTvarcharnvarchar

SELECT Array_ID 
FROM Array_Location JOIN 
     Obj_Type ON Obj_Type.Type_ID = Array_Location.Obj_Type 
WHERE (Convert(nvarchar(max),Obj_Type.Object) = N'CIRCLE') OR (Convert(nvarchar(max),Obj_Type.Object) = N'POLYGON');

答案 2 :(得分:1)

您不仅在连接中出现语法错误,而且我认为您正在执行两个用于在SQL Server中一起创建表的脚本?如果你一起运行它们,通常会出现这个错误:

  

外键Array_Location_fk0引用无效表   dbo.Obj_Type

在更正连接查询之前,必须以这种方式更正创建表脚本:

CREATE TABLE [dbo].[Obj_Type] (
[Type_ID] INT  NOT NULL,
[Object]  TEXT NOT NULL,
CONSTRAINT [PK_OBJ_TYPE] PRIMARY KEY CLUSTERED ([Type_ID] ASC)
);

CREATE TABLE [dbo].[Array_Location] (
[Array_ID]   INT NOT NULL,
[Obj_Type]   INT NOT NULL,
[Element_ID] INT NOT NULL,
CONSTRAINT [Array_Location_fk0] FOREIGN KEY ([Obj_Type]) REFERENCES [dbo].[Obj_Type] ([Type_ID]) ON UPDATE CASCADE
);

答案 3 :(得分:0)

"SELECT Array_ID FROM Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON');

你错过了括号(&#39;)&#39;)在语句结尾处

答案 4 :(得分:0)

您可能会错过JOIN中的array_ID表名称和错误语法。试试这个。

 SELECT Array_Location.Array_ID 
 FROM Array_Location 
     INNER JOIN Obj_Type 
     ON Array_Location.Type_ID = Obj_Type.Type_ID 
 WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON')

答案 5 :(得分:0)

您缺少 Obj_Type.Object =&#39; POLYGON&#39; 的结尾括号.SQL Server WHERE子句始终要求将条件计算为布尔值(true / false)。 请将查询更改为以下内容:

  

SELECT Array_ID FROM Array_Location JOIN Obj_Type.Type_ID ON Array_Location.Obj_Type WHERE (Obj_Type.Object = 'CIRCLE') OR (Obj_Type.Object = 'POLYGON');