gpt4 book ai didi

sql - SQL 如何处理(或不处理)where 子句中的错误?

转载 作者:行者123 更新时间:2023-12-02 09:26:29 24 4
gpt4 key购买 nike

我不小心删除了 MULTIPLECALCCLASSDEF 表中的所有行,内容如下:

delete
from MULTIPLECALCCLASSDEF
where SCHEMEHISTID in (select SCHEMEHISTID from SCHEME where SCHEMEID = @intScheme)

最初看起来不错。问题似乎是 SCHEME 表中没有 SCHEMEHISTID,但既然如此,为什么 where 子句不返回错误,或者不返回行?

此错误(无效的列名称 SCHEMEHISTID):

select SCHEMEHISTID from SCHEME where SCHEMEID = @intScheme

但这不是:

select *
from MULTIPLECALCCLASSDEF
where SCHEMEHISTID in (select SCHEMEHISTID from SCHEME where SCHEMEID = @intScheme)

最佳答案

一般来说,您应该使用表别名和限定列名(包括表别名)。当您使用相关子查询时尤其如此。您刚刚发现了原因。

您想要的查询是:

delete c
from MULTIPLECALCCLASSDEF c
where c.SCHEMEHISTID in (select s.SCHEMEHISTID from SCHEME s where s.SCHEMEID = @intScheme);

这会产生错误。

如果没有别名,查询将被解释为:

delete c
from MULTIPLECALCCLASSDEF c
where c.SCHEMEHISTID in (select c.SCHEMEHISTID from SCHEME s where s.SCHEMEID = @intScheme);

好吧,假设 where 存在任何匹配,则 SCHEMEHISTID 的任何非 NULL 值都可以轻松满足 in

简单的解决方案:始终使用限定的列名称。

关于sql - SQL 如何处理(或不处理)where 子句中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com