[SQL] WHERE 절에 알 수없는 열
SQLWHERE 절에 알 수없는 열
나는 간단한 쿼리를 가지고 :
SELECT u_name AS user_name FROM users WHERE user_name = "john";
나는 where 절에서 알 수없는 열 '_ 이름'을 얻는다. 난 안 후 '_ 이름으로 u_name'를 선택에도 문의 다른 부분에 '_ 이름'을 참조 할 수 있습니까?
해결법
-
==============================
1.SQL은 오른쪽에서 왼쪽으로, 이전 버전을 평가한다. 절은 구문 분석과 select 절 이전에 평가되는 위치 그래서. 때문에 _ 이름에 u_name의 앨리어싱의 아직 발생하지 않았다.
SQL은 오른쪽에서 왼쪽으로, 이전 버전을 평가한다. 절은 구문 분석과 select 절 이전에 평가되는 위치 그래서. 때문에 _ 이름에 u_name의 앨리어싱의 아직 발생하지 않았다.
-
==============================
2.는 어때:
는 어때:
SELECT u_name AS user_name FROM users HAVING user_name = "john";
-
==============================
3.http://dev.mysql.com/doc/refman/5.0/en/select.html 다음 MySQL의 매뉴얼 페이지를 참조하십시오
http://dev.mysql.com/doc/refman/5.0/en/select.html 다음 MySQL의 매뉴얼 페이지를 참조하십시오
(...)
-
==============================
4.
select u_name as user_name from users where u_name = "john";
이런 식으로 생각, 당신의 절은 반환 할 행 (또는 조인 행)의 필요성을 결정하기 위해, 첫번째 평가 곳. 일단 절은 실행되는 곳은 select 절은 그것을 실행합니다.
그것을 더 나은 방법을 말하자면,이 상상 :
select distinct(u_name) as user_name from users where u_name = "john";
당신은 두 번째없이 전반을 참조 할 수 없습니다. 어디 항상 다음 select 절, 먼저 평가됩니다.
-
==============================
5.당신은 당신이 실제로 데이터베이스에 존재하지 않는 새 필드를 만들 SELECT 문을 사용했습니다 다음과 같은 쿼리 (적어도 하나 개의 첨부 파일이있는 모든 노드를 찾을 수)를 수행하고, 사용하려고 시도하는 경우 이 같은 문제로 실행하겠습니다 그 결과에 대한 별칭 :
당신은 당신이 실제로 데이터베이스에 존재하지 않는 새 필드를 만들 SELECT 문을 사용했습니다 다음과 같은 쿼리 (적어도 하나 개의 첨부 파일이있는 모든 노드를 찾을 수)를 수행하고, 사용하려고 시도하는 경우 이 같은 문제로 실행하겠습니다 그 결과에 대한 별칭 :
SELECT nodes.*, (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) AS attachmentcount FROM nodes WHERE attachmentcount > 0;
당신은 "WHERE 절에 알 수없는 열 'attachmentcount'"오류가 발생합니다.
솔루션은 실제로 매우 간단합니다 - 그냥 별칭, 예를 생산하는 문 별칭을 대체 :
SELECT nodes.*, (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) AS attachmentcount FROM nodes WHERE (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) > 0;
당신은 여전히 별칭이 반환거야,하지만 지금은 SQL은 알 수없는 별명에서 주방장 안된다.
-
==============================
6.정의 된 별칭이 WHERE 절에 의해 환영되지 않은이의 HAVING 절을 사용해야합니다
정의 된 별칭이 WHERE 절에 의해 환영되지 않은이의 HAVING 절을 사용해야합니다
SELECT u_name AS user_name FROM users HAVING user_name = "john";
또는 당신은 직접 WHERE와 함께 원래의 열 이름을 사용할 수 있습니다
SELECT u_name AS user_name FROM users WHERE u_name = "john";
같은 당신은 하위 쿼리의 결과 또는이 WHERE가없는 HAVING 절에 의해 액세스됩니다 어떤 계산과 같은 사용자 정의 별칭에 결과를 가지고
SELECT u_name AS user_name , (SELECT last_name FROM users2 WHERE id=users.id) as user_last_name FROM users WHERE u_name = "john" HAVING user_last_name ='smith'
-
==============================
7.어느 한 쪽:
어느 한 쪽:
SELECT u_name AS user_name FROM users WHERE u_name = "john";
또는:
SELECT user_name from ( SELECT u_name AS user_name FROM users ) WHERE u_name = "john";
후자는 지원이 인라인보기로 밀어 술어 RDBMS 경우 이전과 동일하게해야한다.
-
==============================
8.수정 :
수정 :
SELECT u_name AS user_name FROM users WHERE u_name = 'john';
-
==============================
9.아니 당신은 올바른 이름으로 선택해야합니다. 당신은 당신이 별명에서 선택한 테이블을 준 경우에 당신은 그 생각을 사용할 수 있습니다.
아니 당신은 올바른 이름으로 선택해야합니다. 당신은 당신이 별명에서 선택한 테이블을 준 경우에 당신은 그 생각을 사용할 수 있습니다.
-
==============================
10.아니 당신은 할 수 없습니다. USER_NAME 님이 반환 될 때까지 존재하지 않는 것입니다.
아니 당신은 할 수 없습니다. USER_NAME 님이 반환 될 때까지 존재하지 않는 것입니다.
-
==============================
11.절 라인 1 및 2에 의해 발생 및 라인 (3)에 의해 해결 WHERE 알 컬럼 :
절 라인 1 및 2에 의해 발생 및 라인 (3)에 의해 해결 WHERE 알 컬럼 :
-
==============================
12.그것이 도움이 될 수 있습니다.
그것이 도움이 될 수 있습니다.
당신은 할 수 있습니다
SET @somevar := ''; SELECT @somevar AS user_name FROM users WHERE (@somevar := `u_name`) = "john";
효과가있다.
하지만 SURE 당신 DO도하지!
그러나, 그것은 어떤 경우에 도움이 될 수있다
-
==============================
13.당신이 당신의 쿼리에서 테이블을 별칭을 수 있지만 (즉, "사용자 U를 FROM u.username을 선택;"), 당신은 열 당신이있는 거 참조의 실제 이름을 사용합니다. 필드가 반환하는 방법을 AS에만 영향.
당신이 당신의 쿼리에서 테이블을 별칭을 수 있지만 (즉, "사용자 U를 FROM u.username을 선택;"), 당신은 열 당신이있는 거 참조의 실제 이름을 사용합니다. 필드가 반환하는 방법을 AS에만 영향.
-
==============================
14.
SELECT user_name FROM ( SELECT name AS user_name FROM users ) AS test WHERE user_name = "john"
-
==============================
15.다만이 문제를 가지고 있었다.
다만이 문제를 가지고 있었다.
확인 데이터베이스에있는 개체의 이름에 공백이 없도록 해주십시오.
예를 들면 대신 'USER_NAME'의 '_ 이름'
-
==============================
16.IN 조건 또는 OR 조건이 쿼리 스파크 1.6.x 이상인 경우에 노력을 사용하여 작업을 다시 시도
IN 조건 또는 OR 조건이 쿼리 스파크 1.6.x 이상인 경우에 노력을 사용하여 작업을 다시 시도
SELECT patient, patient_id FROM `patient` WHERE patient IN ('User4', 'User3');
또는
SELECT patient, patient_id FROM `patient` WHERE patient = 'User1' OR patient = 'User2';
-
==============================
17.나를 위해 문제의 근본 내가 WHERE 절에서 사용하기에 복사 숫자였다. 수는 적어도 MySQL의 워크 벤치를 들면, "보이지 않는"기호가 있었다. 나는 그것이 명확하게 눈에 보였다 크롬 콘솔에 수를 놓았다.
나를 위해 문제의 근본 내가 WHERE 절에서 사용하기에 복사 숫자였다. 수는 적어도 MySQL의 워크 벤치를 들면, "보이지 않는"기호가 있었다. 나는 그것이 명확하게 눈에 보였다 크롬 콘솔에 수를 놓았다.
-
==============================
18.나는이 유용한 발견, 같은 문제가 있었다.
나는이 유용한 발견, 같은 문제가 있었다.
mysql_query("SELECT * FROM `users` WHERE `user_name`='$user'");
작은 따옴표 ''에 $ 사용자를 넣어 기억합니다.
from https://stackoverflow.com/questions/153598/unknown-column-in-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 문자열과 함께 작업에) (폭발의 등가 (0) | 2020.03.16 |
---|---|
[SQL] 사용하여 하위 쿼리 * 1를 존재하거나 존재 (0) | 2020.03.16 |
[SQL] 같은 select 문에 의해 수와 그룹을 사용하는 방법 (0) | 2020.03.16 |
[SQL] 어떻게 java.sql.ResultSet의 크기를받을 수 있나요? (0) | 2020.03.16 |
[SQL] T-SQL과 함께 일 월 및 연도에서 날짜를 만들기 (0) | 2020.03.16 |