繁体   English   中英

SQL“无效的列名”错误,内部选择

[英]SQL 'Invalid column name ' error, with inner select

我有以下SQL:

SELECT A.*, 
(SELECT answer FROM [tblAnswers] B 
WHERE  B.memberID = A.memberID AND QuestionID = 3) AS ethnicity
FROM [tblMembers] A  
WHERE 
LOWER(gender) = 'm' 
AND ethnicity = 'Sephardi' 

我得到错误Invalid column name 'ethnicity'指的是对该列的最后引用。

问题:为什么此列不可用于WHERE子句?

我知道,如果我执行以下操作,它将起作用:

SELECT A.*, 
(SELECT answer FROM [tblAnswers] B WHERE  B.memberID = A.memberID AND QuestionID = 3) AS ethnicity
FROM [tblMembers] A  
WHERE
LOWER(gender) = 'm' 
AND convert(nvarchar, (SELECT answer FROM [tblAnswers] B WHERE  B.memberID = A.memberID AND QuestionID = 3)) = 'Sephardi'  

如果不专门引用整个计算(查询,大小写等),则不能在where子句中使用“计算”​​列。

您应该加入查询表,而不是对其进行子查询:

Select A.*, B.answer
From tblMembers A
    Inner Join tblAnswers B on A.memberID = B.membeID and A.QuestionID = 3
Where Lower(gender) = 'm'
    and B.answer = 'Sephardi'

您不能使用在以下WHERE子句中的SELECT子句中刚分配的列名。 通常,您可以将其放在子查询中,然后使用列名:

SELECT * FROM
(
    SELECT A.*, 
    (SELECT answer FROM [tblAnswers] B 
    WHERE  B.memberID = A.memberID AND QuestionID = 3) AS ethnicity
    FROM [tblMembers] A  
    WHERE LOWER(gender) = 'm' 
) s
WHERE ethnicity = 'Sephardi' 

但是,此查询可能更适合于JOIN

SELECT A.*, t.answer AS ethnicity
FROM [tblMembers] A  
LEFT JOIN tblAnswers t ON b.memberID = A.memberID AND QuestionID = 3
WHERE LOWER(gender) = 'm' AND t.answer = 'Sephardi' 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM