SQL';无效的列名';错误,使用内部选择
我有以下SQL:SQL';无效的列名';错误,使用内部选择,sql,sql-server,Sql,Sql Server,我有以下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' 我得到一个错误无效的列名“种族”引用了对该列的最后一次引用 问题:为什么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 ethnicity = 'Sephardi'
我得到一个错误无效的列名“种族”
引用了对该列的最后一次引用
问题:为什么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
子句中指定的列名。一般情况下,您可以将其放入子查询中,然后使用列名:
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'
此查询可能更适合于联接
,不过:
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'
您不能使用刚刚在以下
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'
此查询可能更适合于联接
,不过:
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'
在where子句中使用“Computed”列时,必须特别引用整个计算(查询、大小写等)
您应该联接查询表,而不是对其进行子查询:
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子句中使用“Computed”列时,必须特别引用整个计算(查询、大小写等)
您应该联接查询表,而不是对其进行子查询:
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'
不能,这是sql server的一个限制:实际上,我认为没有什么理由不使用简单的连接。它还可以解决您的问题。您不能,这是sql server的一个限制:实际上,我认为没有什么理由不使用简单的连接。这也会解决你的问题。为什么
左连接
而不是内部连接
?习惯真的,没有其他原因。在这种情况下,两者都是一样的。我已经更新了特定场景下的选择为内部。为什么左连接
而不是内部连接
?真的,没有其他原因。在这种情况下,两者都是一样的。我已经根据具体场景将选择更新为内部。谢谢。我需要左连接
,因为这些辅助行可能不存在。我有三个子查询字段要过滤。哪种方法在资源方面更好?就我个人而言,我100%的时间都在使用JOIN
100%——我确信有些情况下子查询可能更好,但我在实践中还没有遇到过。谢谢。我需要左连接
,因为这些辅助行可能不存在。我有三个子查询字段要过滤。哪种方法在资源方面更好?就我个人而言,我100%的时间都在使用JOIN
100%——我确信在某些情况下子查询可能更好,但我在实践中还没有遇到过。