C#中的SQL查询出错:使用SELECT JOIN WHERE OR
本文关键字:SELECT JOIN WHERE OR 使用 中的 SQL 查询 出错 | 更新日期: 2023-09-27 17:54:25
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
);
感谢
原因:
您在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');
这是您想要的,您还需要将TEXT
转换为varchar
或nvarchar
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');
您的联接中不仅有语法错误,而且我认为您正在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
);
"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');
语句末尾缺少括号("("(,其中
Obj_Type.Object='POLYGON'缺少结束的右括号。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');
您可能会在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')