这个问题已经在这里有了答案:
已关闭8年。
我今天在工作时偶然发现了这个,我想知道为什么下面的代码不会生成并出错?
CREATE TABLE #TableA (ColumnA VARCHAR(25))
CREATE TABLE #TableB (ColumnB VARCHAR(25))
INSERT INTO #TableA (ColumnA) VALUES('1')
INSERT INTO #TableA (ColumnA) VALUES('2')
INSERT INTO #TableA (ColumnA) VALUES('3')
INSERT INTO #TableB (ColumnB) VALUES('1')
SELECT *
FROM #TableA
WHERE ColumnA IN(SELECT ColumnA FROM #TableB)
输出:
ColumnA
1
2
3
ColumnA在#TableB上不存在,为什么不产生错误?
@@ VERSION告诉我我在以下环境中运行它:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
最佳答案
子查询ColumnA
中的(SELECT ColumnA FROM #TableB)
引用#TableA的ColumnA
,它是SELECT列表中的有效列。
因此,没有错误,并且由于将#TableA.ColumnA与#TableA.ColumnA进行比较而获得了三行
如果要验证上述语句,请使用有效列(例如ColumnAB)以外的任何内容替换ColumnA,否则会出现错误。
如果您尝试这样做:
CREATE TABLE #TableA (ColumnA VARCHAR(25))
CREATE TABLE #TableB (ColumnB VARCHAR(25))
INSERT INTO #TableA (ColumnA) VALUES('1')
INSERT INTO #TableA (ColumnA) VALUES('2')
INSERT INTO #TableA (ColumnA) VALUES('3')
INSERT INTO #TableB (ColumnB) VALUES('1')
SELECT *
FROM #TableA
WHERE ColumnA IN(SELECT ColumnAB FROM #TableB)
输出将是
关于sql-server-2008 - 为什么此SQL代码不会产生错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11528612/