Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除中不存在的位置_Sql Server_Tsql - Fatal编程技术网

Sql server 删除中不存在的位置

Sql server 删除中不存在的位置,sql-server,tsql,Sql Server,Tsql,我有一个简单的问题。我从以下SQL中得到一个语法错误: DELETE FROM Blog.Category c WHERE NOT EXISTS (SELECT * FROM Blog.Posts p WHERE p.postCategory = blog.Category.catId) 很明显我错过了一些愚蠢的事情。如有任何提示,将不胜感激 编辑 我也试过了 DELETE FROM Blog.Category c where NOT EXISTS(SE

我有一个简单的问题。我从以下SQL中得到一个语法错误:

DELETE FROM Blog.Category c 
WHERE NOT EXISTS (SELECT * FROM Blog.Posts p
                  WHERE p.postCategory = blog.Category.catId)
很明显我错过了一些愚蠢的事情。如有任何提示,将不胜感激

编辑

我也试过了

DELETE FROM Blog.Category c 
where NOT EXISTS(SELECT * FROM Blog.Posts p WHERE  p.postCategory = c.catId)
不管我得到什么


靠近“c”的语法不正确

请尝试以下查询,我认为它与alias有关:

DELETE FROM Blog.Category c 
WHERE NOT EXISTS (SELECT * FROM Blog.Posts p
                  WHERE p.postCategory = c.catId);

我更喜欢更新和删除alias的表,因为我觉得它更清晰

DELETE c
FROM Blog.Category c
left join Blog.Posts p ON p.postCategory = c.catId
WHERE p.postCategory IS NULL
查询中的问题是您为表添加了别名,然后在EXISTS中不使用它。

这里的主题相同

在SQL Server中,使用“不存在”时,需要为要连接的表设置别名,并在delete语句中指定要从中删除行的表


您在
DELETE
语句之后直接缺少别名

DELETE c FROM Blog.Category c 
WHERE NOT EXISTS(SELECT * FROM Blog.Posts p WHERE  p.postCategory = c.catId)

或者,您可以省略别名并使用完整的表名

DELETE FROM Blog.Category
WHERE NOT EXISTS(SELECT * FROM Blog.Posts p WHERE  p.postCategory = Blog.Category.catId)

blog.Category.catId
似乎不适合这里。。。。
blog
是架构还是您将其别名错了,它应该是
c.catId
,因为这是基本表的别名连接速度更快?我觉得这需要一些证据,因为通常情况并非如此afaik@JoePhillips在小数据集中,它是可以忽略不计的。我刚刚创建了一个小示例,在两个表中包含50000和100000条记录,并交替运行了10次。连接平均为3毫秒,不存在平均为7.5毫秒。我认为如果使用更广泛的连接,可能会得到不同的结果tables@JoePhillips现在正在加载一个100倍于原始大小的数据集。只是等待它完成:)删除了关于连接速度更快的部分。我很可能在考虑附属选择。随后对5mil和10mil表大小进行的测试表明,if-exists大约占连接时间的60%。