2012-09-27 2 views
1

MySQL에서 IF 절 안에 LIKE를 사용하고 오류를 가져 오려고합니다. 나는이 할 경우mysql에서 IF 내부에서 LIKE 사용하기

SELECT nc.web_name AS company_name, 
    IF((b.booth_number LIKE '%Cafe%', b.booth_number, substring(b.booth_number,4)) AS booth_number, 
    nc.site_url AS website, IF (nc.ismi_status = 1, 'Member','') AS member_status 
    FROM booth_sale bs JOIN {ismi.booth} b ON bs.booth_id = b.booth_id 
    JOIN ismi.new_people np ON bs.contact_id = np.id 
    JOIN ismi.new_company nc ON nc.id = np.company_id 
    WHERE b.show_event_id = 298 AND status IN(44,45) ORDER BY 3 

쿼리는 잘 작동 :

IF((b.booth_number = 'Cafe', b.booth_number, substring(b.booth_number,4)) AS booth_number 

을하지만 여러 가능성을 확인해야합니다 - 카페, Cafe1, Cafe2 등이있을 수 있습니다 난에 대한 b.booth_number을 반환하려면 해당 필드 값에 Cafe가 포함 된 레코드.

는 오류가 내가 얻을 수 있습니다 :

PDOException : SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1064 당신은 당신의 SQL 구문에 오류가 있습니다 ; 이 올바른 구문을위한 MySQL 서버 버전과 일치하는지 확인하십시오. 'AS booth_number, nc.site_url AS 웹 사이트, 2 행에서 IF (nc.ismi_status = 1, '회원 ',' ') SELECT nc.web_name AS company_name, IF booth_number, nc.site_url AS 웹 사이트 IF (nc.ismi_status (n.booth_number), b.booth_number, 부분 문자열 (b.booth_number, 4) = 1, 'Member', '') AS member_status FROM {ismi.booth_sale} bs JOIN {ismi.booth} b bs.booth_id = b.booth_id JOIN {ismi.new_people} np ON bs.contact_id = np. id 조인 {ismi.new_company} nc ON nc.id = np.company_id 위치 b.show_event_id = 298 AND 상태 IN (44,45) 주문 3 3

누구나 내가 잘못하고있는 것을 말해 줄 수 있습니까? 아니면 다른 방법이 있습니까?

+0

멋진 catch by newfurniturey. 나는'booth_number'에 대한'booth_number' 앨리어스를 갖는 것이 약간 위험 할 수 있음을 지적하고자합니다. 차별화하는 것이 도움이 될 수 있습니다. – Smandoli

+0

좋은 지적입니다. 나는이 코드를 물려 받았고 작동하고있어, 나는 그걸 가지고 바이올린을하지 않았다. 하지만 코드에서 코드를 작성해 보겠습니다. – EmmyS

답변

3

귀하의 IF 문장에는 여는 괄호가 하나 이상 있습니다. 첫 번째 것을 버리면 아무 문제가 없어야합니다. (물론 다른 SQL 오류도 계류 중에 있습니다.)

... 
IF(b.booth_number LIKE '%Cafe%', b.booth_number, substring(b.booth_number,4)) AS booth_number, 
... 
+0

감사! 나는 원래 두 가지 가능한 값만있을 수 있다고 생각했기 때문에 IF 내부에 OR을 가졌습니다. 내가 그것을 닦을 때 나는 개봉 괄호 중 하나를 놓친 것 같다. – EmmyS

관련 문제