gpt4 book ai didi

sql - 如何防止内部选择表达式中的 SQL Server 错误(使用 'IN' 和 'EXISTS' 关键字)

转载 作者:行者123 更新时间:2023-12-05 01:25:23 24 4
gpt4 key购买 nike

我有两个不同的表,它们的不同列如下:

CREATE TABLE T1(C1 INT)
CREATE TABLE T2(C2 INT)

每个程序员都知道如果我们用错误的语法编写查询,查询编译器应该给我们一个错误。比如这个:

SELECT C1 FROM T2 
--ERROR: Invalid column name 'C1'.

但是如果我们使用这个错误的查询作为内部选择,不幸的是 SQL 会执行它:

SELECT * 
FROM T1
WHERE C1 IN (SELECT C1 FROM T2)
--returns all rows of T1

并且下面的错误查询也会执行并返回 T1

的所有行
SELECT * 
FROM T1
WHERE EXISTS (SELECT C1 FROM T2)
--returns all rows of T1

当我们在 UPDATE 中使用这些错误的查询时,情况会变得更糟,例如:

UPDATE T1
SET C1 = NULL
WHERE C1 IN (SELECT C1 FROM T2)
--updates all rows of T1

现在,我想防止这个错误。我可以强制我的数据库开发人员小心,但有什么系统的方法可以防止这个错误吗?

最佳答案

听说过 Correlated Subquery ,您始终可以在子查询中引用外部查询列

相信你一定见过这样的查询

SELECT * FROM T1 
WHERE EXISTS (SELECT 1 FROM T2 where t1.c1 = t2.c2)

T1 中的 C1 列在 Where 子句中引用,您在 Select 中引用这就是区别.这里没有BUG

关于sql - 如何防止内部选择表达式中的 SQL Server 错误(使用 'IN' 和 'EXISTS' 关键字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48247389/

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