CONCAT 조건으로 MySQL 선택


116

나는 이것을 내 마음 속으로 컴파일하려고한다. 나는 이름과 성 필드가있는 테이블을 가지고 있고 "Bob Jones"또는 "Bob Michael Jones"와 같은 문자열을 가지고있다.

예를 들어 이름에는 Bob이 있고성에는 Michael Jones가 있습니다.

그래서 노력하고 있어요

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
 WHERE firstlast = "Bob Michael Jones"

그러나 그것은 알려지지 않은 열 "firstlast"를 말한다 .. 누구든지 제발 도와 줄 수 있습니까?

답변:


177

제공하는 별칭은 쿼리 출력용이며 쿼리 자체에서는 사용할 수 없습니다.

다음 식을 반복 할 수 있습니다.

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

또는 쿼리를 래핑

SELECT * FROM (
  SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users) base 
WHERE firstLast = "Bob Michael Jones"

5
이것은 대답으로 설정되었습니다.
Arun Killu 2013 년

잠시 후, 나는 더 나은 해답로 사용하는 것에 동의 말할 수
알렉스 K


1
행이 많은 부피가 큰 테이블의 경우 "쿼리 래핑"버전을 사용하는 것이 현명하지 않다고 생각합니다.
Fandi Susanto

34

이 시도:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"

나에게 완벽하게 작동합니다. 정말 감사합니다 :) 그리고 코드에 텍스트를 넣어 주셔서 감사합니다. 저는 잊었습니다
Alex K

10
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

8

CONCAT_WS ()를 사용하십시오.

SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users 
WHERE firstlast = "Bob Michael Jones";

첫 번째 인수는 나머지 인수의 구분 기호입니다.


그래서 그것은되어야합니다CONCAT_WS(' ', ..
Alex K

7

시험:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

쿼리를 하위 선택으로 수행하지 않는 한 쿼리의 where 절에서 별칭 firstlast를 사용할 수 없습니다.


7

CONCAT식 을 반복 하거나 하위 쿼리를 사용 하는 대신 사용할 수 있습니다. HAVING열 별칭을 인식 하는 절 을 사용할 수 있습니다 .

SELECT 
  neededfield, CONCAT(firstname, ' ', lastname) AS firstlast 
FROM
  users 
HAVING firstlast = "Bob Michael Jones"

다음은 작동하는 SQL Fiddle 입니다.


having 절이 더 많은 관심을 끌지 못하는 이유가 확실하지 않습니다. 가상 열 이름을 직접 사용할 수 있습니다. having 절에 더 많은 오버 헤드가 있습니까?
Paul

@Paul은 쿼리 실행 끝에 절을 적용하여 집계 함수 (예 : MAX ())에 대한 조건을 설정하는 데 사용할 수 있습니다. having 절은 인덱스를 사용할 수 없으므로 느립니다.
Mostafa Vatanpour 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.