2011-08-11 4 views
14

나는 두 개의 열 first_namelast_name와 고객 테이블이 있습니다.두 개의 열을 고려하여 LIKE를 수행하는 방법은 무엇입니까?

어떻게 같은 길드에서 모두 열에서 데이터를 얻을 수있는 쿼리에서 LIKE를 사용할 수 있습니까? 예를 들어

:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%' 

내가 이것을 시도하고 그것이 나에게 존재하지 않는 full_name 열을 알려줍니다.

+0

입니다 이름 자리 표시 자입니다 (PDO) 당신이 원하는 것을하기위한 SQL의 효율적인 수단. –

+0

@OMG 테이블과 데이터 삽입을 변경할 수 있으므로 새로운 인덱스 열 full_name을 생성하고 대신 대답에 언급 된 성능 문제로 인해이를 사용했습니다. – RedDragon

답변

31
SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 
+1

열의 추가 공백을 고려하여 first_name 및 last_name을 잘라낼 수도 있습니다. – Narnian

+1

또한 사용자가 해당뿐만 아니라 입력 할 수있는 경우 "성, 이름"변형을 확인할 수 있습니다. – Narnian

+0

너무 간단하고 훌륭합니다. danke :) – arjunaaji

5

당신은 거의

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

주입니다 : 이것은 매우 좋은 성능을 가지고하지 않을 수 있습니다. full text search을 고려할 수도 있습니다.

0

저는 현재 MySql을 가지고 있지 않지만 아래 코드와 같은 것을 할 수 없습니까?

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

면책 조항 : 이것은 매우 느림 !!!

4

대신 사용 WHEREHAVING :

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
    FROM customer HAVING full_name LIKE 'John D%' 
+1

왜 대신에 HAVING이 필요합니까? –

0
SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

은 매우 느릴 수 있지만 데이터베이스가 매우 작은 경우 그 문제가되지 않습니다. CONCAT 만들 사용하는 경우 반드시 데이터 정렬은 열 이름 또는 다른 사람이 당신에게 오류를 가져옵니다 모두 동일합니다. 다음은

내가 내 LIKE 문이 두 범주 이름과 코스 이름을 작업 할 때의 문입니다. 두 테이블 모두에서 cat_id를 확인하여 어느 코스가 어떤 카테고리에 속해 있는지 알 수 있습니다.

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name) 
LIKE :name ORDER BY b.cat_id 

:

는 [전체 텍스트 검색 (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)가 가장
관련 문제