Sql server MS SQL:嵌套选择-神秘;无效的列名";错误
当我对MSSQL 2000运行以下查询时Sql server MS SQL:嵌套选择-神秘;无效的列名";错误,sql-server,sql-server-2000,Sql Server,Sql Server 2000,当我对MSSQL 2000运行以下查询时 SELECT DISTINCT(Email), (SELECT TOP 1 ActivityID FROM Activity aa, ActivityType tt WHERE aa.ActivityTypeId = tt.ActivityTypeId AND aa.ConsumerID = c.ConsumerID AND tt.ActivityTyp
SELECT
DISTINCT(Email),
(SELECT TOP 1 ActivityID
FROM Activity aa, ActivityType tt
WHERE aa.ActivityTypeId = tt.ActivityTypeId
AND aa.ConsumerID = c.ConsumerID
AND tt.ActivityType = 'Something_OptIn') optin,
(SELECT TOP 1 ActivityID
FROM Activity aa, ActivityType tt
WHERE aa.ActivityTypeId = tt.ActivityTypeId
AND aa.ConsumerID = c.ConsumerID
AND tt.ActivityType = 'Something_OptOut') optout
FROM
Activity a,
Consumer c,
ActivityType t
WHERE
c.CountryID = '23'
AND t.ActivityType = 'Something_Create'
AND a.ActivityTypeId = t.ActivityTypeId
AND c.ConsumerID = a.ConsumerID
AND optin > 1
我得到以下错误
Server: Msg 207, Level 16, State 3, Line 1
Invalid column name 'optin'.
为什么会发生这种情况?我不明白为什么它会无效。SQL Server不允许您在同一级别按名称引用别名。要解决此问题,请重复列定义:
WHERE
c.CountryID = '23'
AND t.ActivityType = 'Something_Create'
AND a.ActivityTypeId = t.ActivityTypeId
AND c.ConsumerID = a.ConsumerID
AND (SELECT TOP 1 ActivityID
FROM Activity aa, ActivityType tt
WHERE aa.ActivityTypeId = tt.ActivityTypeId
AND aa.ConsumerID = c.ConsumerID
AND tt.ActivityType = 'Something_OptIn'
) > 1
或使用子查询:
SELECT *
FROM (
SELECT
DISTINCT(Email),
(...) optin,
(...) optout
FROM
Activity a,
Consumer c,
ActivityType t
) as SubqueryAlias
WHERE
c.CountryID = '23'
AND t.ActivityType = 'Something_Create'
AND a.ActivityTypeId = t.ActivityTypeId
AND c.ConsumerID = a.ConsumerID
AND optin > 1
最后一行
和optin>1
是罪犯
WHERE
子句对SELECT列表中的列别名一无所知
您可能应该子查询此SELECT而不使用有问题的条件,并将该条件应用于外部SELECT
SELECT *
FROM (
SELECT
...
WHERE ... /* everything except 'optin > 1' */
) anyAlias
WHERE optin > 1
它只适用于一个嵌套的SELECT,但不适用于optin和optout。请参阅。@jwandborg:您链接到的查询包含
=NULL
,但任何内容都不等于NULL。即使null=null
也不是真的。您可能正在查找为null
。