我有一个CTE,它是一个表上的select语句。现在,如果我从CTE中删除1行,它会从我的基表中删除该行吗?
如果我有一个临时表而不是CTE,也是同样的情况吗?
答案 0 :(得分:18)
检查DELETE statement documentation,是,您可以使用CTE删除它,它将影响基础表。同样对于UPDATE语句......
如果我有一个临时表而不是CTE,也是同样的情况吗?
不,从临时表中删除只会影响临时表 - 没有与数据来自的表的连接,临时表是一个独立的对象。
答案 1 :(得分:3)
您可以将CTE视为子查询,它下面没有临时表
因此,如果对CTE运行delete语句,则会从表中删除行。当然,如果SQL可以根据您的CTE推断出哪个表是upadte / delete。否则你会看到一个错误。
如果使用临时表,并从中删除行,则源表不会受到影响,因为临时表和原始表没有任何关联。
答案 2 :(得分:0)
如果你有一个子查询说连接多个表,你需要在多个地方使用它,那么可以使用cte和temp表。但是,如果您想根据子查询条件删除记录,那么cte就是您的选择。有时你可以简单地使用不需要cte的delete语句,因为它是一个delete语句,只有满足查询条件的行才会被删除,即使有多个条件用于过滤。