【问题标题】:Incorrect syntax near the keyword 'INNER' in DELETE query SQL Server errorDELETE 查询 SQL Server 错误中关键字“INNER”附近的语法不正确
【发布时间】:2016-02-15 18:13:09
【问题描述】:

我刚刚在 SQL Server 2012 中编写了这个 DELETE 查询,但出现错误:

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

当我执行它时。有人可以帮忙吗?

DELETE FROM Nhanvien 
INNER JOIN Hoadon ON Nhanvien.MaNV = Hoadon.MaNV
WHERE YEAR(Ngaysinh) = '1994'

enter image description here

编辑:

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012


    【解决方案1】:

    您可以使用DELETE FROM FROM了解更多信息Why does DELETE FROM … FROM … not error out

    DELETE 
    FROM #Nhanvien
    FROM #Nhanvien
    JOIN #Hoadon ON #Nhanvien.MaNV=#Hoadon.MaNV
    WHERE YEAR(Ngaysinh)='1994';
    

    LiveDemo


    您可以先跳过FROM 并使用:

    DELETE #Nhanvien
    FROM #Nhanvien
    JOIN #Hoadon ON #Nhanvien.MaNV=#Hoadon.MaNV
    WHERE YEAR(Ngaysinh)='1994';
    

    LiveDemo2

    警告

    您应该在 Ngaysinh 列前加上表名。我假设它来自我演示中的#Nhanvien 表。

    【讨论】:

    • 感谢您的帮助,但它在 MaNV 中出现了一个新错误,“无效的列名 MaNV”。这个错误是因为我在数据库中的约束而发生的吗?
    • @ĐinhQuân 错误信息?共享两个表的 CREATE TABLE 脚本
    • @ĐinhQuân 您在其中一个表中没有此列,可能此列名称不同
    • 这里:CREATE TABLE Nhanvien (MaNV int NOT NULL, TenNV nvarchar(30), Diachi nvarchar(20), Ngaysinh Datetime, SDT varchar(11)); CREATE TABLE Hoadon (MaHd int NOT NULL, MaKh int NOT NULL, MaNV int NOT NULL, Ngaylap Datetime);
    • 谢谢你的帮助 lad2025,我做到了,我的数据库还没有完成,所以它还有其他问题 DELETE 你的 livedemo2 是对的。
    【解决方案2】:

    您需要明确定义要从哪个表中删除:

    DELETE n 
    FROM Nhanvien n
    INNER JOIN Hoadon h ON n.MaNV = h.MaNV
    WHERE YEAR(n) = '1994'
    

    【讨论】:

    • 谢谢,我想删除表“Nhanvien”上的人的信息,该人出生于 1994 年,顺便说一句,“Hoadon”表有一个外键到“MaNV”上的表“Nhanvien” - 这个人的ID。所以我不明白为什么它有错误。
    • 更容易记住日常使用的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2013-12-04
    相关资源
    最近更新 更多