【问题标题】:Error with SQL query in C#: Using SELECT JOIN WHERE ORC# 中的 SQL 查询出错:使用 SELECT JOIN WHERE OR
【发布时间】:2015-06-09 09:18:34
【问题描述】:

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
);

谢谢

【问题讨论】:

  • 错字对不起。我的代码中确实包含了它。所以还是同样的错误
  • 更新您的问题以反映您使用的确切代码
  • 我已经完成了。现已解决

标签: c# sql .net sql-server


【解决方案1】:

原因:

您在 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
  • @PravinDeshmukh:啊!你说的对!在 OP 编辑​​他的问题之前,我不知道数据类型。谢谢指出
【解决方案2】:

这就是你想要的,你还需要将TEXT转换为varcharnvarchar

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');

【讨论】:

    【解决方案3】:

    不仅您的联接中有语法错误,而且我认为您正在执行两个脚本以在 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
    );
    

    【讨论】:

    • 我刚刚从 Visual Studios 复制了它。但我确实有正确创建。好地方虽然谢谢。我已在问题中对其进行了修改。
    【解决方案4】:
    "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 语句的末尾错过了括号 (')')

    【讨论】:

      【解决方案5】:

      您缺少 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');

      【讨论】:

        【解决方案6】:

        您可能会错过解决array_ID 表名以及JOIN 中的错误语法。试试这个。

         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')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多