关键字“JOIN”附近的语法不正确。使用 asp.net [重复]

Posted

技术标签:

【中文标题】关键字“JOIN”附近的语法不正确。使用 asp.net [重复]【英文标题】:Incorrect syntax near the keyword 'JOIN'. using asp.net [duplicate] 【发布时间】:2017-12-12 16:27:33 【问题描述】:

请帮我找出这个错误的原因

关键字“JOIN”附近的语法不正确

代码如下:

Label name = (Label)GuitarBrandsGridView.Rows[e.RowIndex].FindControl("lblName");

string queryGuitarItems = "DELETE FROM stringInstrumentItem JOIN brand ON stringInstrumentItem.brandId = brand.brandId WHERE stringInstrumentItem.brandId IN(SELECT brand.brandId FROM brand WHERE name = @brand)";

using (SqlConnection connectionGuitarItems = new SqlConnection(ConfigurationManager.ConnectionStrings["musicStoreConnection"].ToString()))

    using (SqlCommand commandGuitarItems = new SqlCommand(queryGuitarItems, connectionGuitarItems))
    
        connectionGuitarItems.Open();
        commandGuitarItems.Connection = connectionGuitarItems;
        commandGuitarItems.Parameters.Add(new SqlParameter("@brand", name.Text));
        commandGuitarItems.ExecuteNonQuery();

        connectionGuitarItems.Close();
        commandGuitarItems.Parameters.Clear();
    

【问题讨论】:

如果您打开 SQL Server Management Studio 并运行此查询 - DELETE FROM stringInstrumentItem JOIN brand ON stringInstrumentItem.brandId = brand.brandId WHERE stringInstrumentItem.brandId IN(SELECT brand.brandId FROM brand WHERE name = 'brand value here') 您将看到相同的错误。您需要让该查询在 Management Studio 中运行,然后尝试在您的应用程序中使用它。问题是 SQL 问题 - 不是 C# 或 ASP.NET。 您只能从一个表中删除,不能从多个表的连接中删除。您要从哪个表中删除记录? 顺便说一句,您根本不需要子选择。这将为您提供相同的记录,前提是您将使用 SELECT * 而不是 DELETEDELETE FROM stringInstrumentItem s JOIN brand b ON s.brandId = b.brandId WHERE b.name = @brand 【参考方案1】:

这里是做delete from join语法的权利

DELETE S  --missing alias name
FROM stringInstrumentItem S 
JOIN brand B 
  ON S.brandId = B.brandId 
WHERE B.name = @brand

注意:您不需要sub-query,因为Brand 表已经加入

【讨论】:

这个可以。是的,我确实错过了 S。【参考方案2】:

改变这个:

DELETE FROM stringInstrumentItem JOIN brand ON stringInstrumentItem.brandId = brand.brandId WHERE stringInstrumentItem.brandId IN(SELECT brand.brandId FROM brand WHERE name = @brand)

到这里:

DELETE FROM stringInstrumentItem
FROM stringInstrumentItem t1 JOIN brand t2 ON t1brandId = t2.brandId WHERE t1.brandId IN(SELECT t3.brandId FROM brand t3 WHERE name = @brand)

希望能帮到你:)

【讨论】:

【参考方案3】:

你必须给你想删除的表一个alias。我刚刚将表命名为“sII”。此外,您不需要 WHERE 子句。您也可以在连接条件中限制删除。

   DELETE sII
     FROM stringInstrumentItem  sII
INNER JOIN brand b
        ON sII.brandId = b.brandId 
       AND b.name = @brand

【讨论】:

以上是关于关键字“JOIN”附近的语法不正确。使用 asp.net [重复]的主要内容,如果未能解决你的问题,请参考以下文章

关键字“Key”附近的语法不正确。 ASP.net 详细信息视图中的错误

System.Data.SqlClient.SqlException:关键字“FROM”附近的语法不正确

关键字“FOR”XML 附近的语法不正确

错误“关键字 'CONVERT' 附近的语法不正确”

添加新的 Join 语句后 MS-SQL 存储过程引发错误。消息 102,级别 15,状态 1,第 279 行“WHERE”附近的语法不正确

关键字“read”附近的语法不正确