Mer*_*rta 2 sql sql-server syntax-error sql-in
我有两个不同的表,其中包含不同的列,如下所示:
CREATE TABLE T1(C1 INT)
CREATE TABLE T2(C2 INT)
Run Code Online (Sandbox Code Playgroud)
每个程序员都知道我们是否用错误的语法编写查询,查询编译器应该给我们一个错误.比如这一个:
SELECT C1 FROM T2
--ERROR: Invalid column name 'C1'.
Run Code Online (Sandbox Code Playgroud)
但是如果我们使用这个错误的查询作为内部选择,不幸的是SQL会执行它:
SELECT *
FROM T1
WHERE C1 IN (SELECT C1 FROM T2)
--returns all rows of T1
Run Code Online (Sandbox Code Playgroud)
并且还会执行以下错误查询并返回所有行 T1
SELECT *
FROM T1
WHERE EXISTS (SELECT C1 FROM T2)
--returns all rows of T1
Run Code Online (Sandbox Code Playgroud)
当我们使用这些错误的查询时会变得更糟UPDATE:
UPDATE T1
SET C1 = NULL
WHERE C1 IN (SELECT C1 FROM T2)
--updates all rows of T1
Run Code Online (Sandbox Code Playgroud)
现在,我想防止这个错误.我可以强迫我的数据库开发人员小心,但有没有系统的方法来防止这个错误?
有没有听说过Correlated Subquery,你总是可以在子查询中引用外部查询列
我相信你一定见过这样的问题
SELECT * FROM T1
WHERE EXISTS (SELECT 1 FROM T2 where t1.c1 = t2.c2)
Run Code Online (Sandbox Code Playgroud)
这里C1列来自T1于被称为Where条款,你是指在Select这就是区别.这里没有BUG
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |