2013-12-16 4 views
-3

우선이 내용은 약간 설명하기가 복잡합니다.알 수없는 값을 반환하는 MySQL 쿼리

하나의 CONCAT에만 문제가 있습니다. 다음 쿼리는 테이블에 존재하지 않는 'Locale'값을 반환합니다.

SELECT client.description, client.name, loc.description 
FROM clients AS client 
LEFT JOIN FromWhere AS from ON from.id = client.id_from 
LEFT JOIN locale AS loc ON loc.id = from.id_loc 
client.description LIKE CONCAT('%', ?, '%') 
AND IFNULL(client.name, '') LIKE CONCAT('%', ?, '%') 
AND IFNULL(loc.description, '') LIKE CONCAT('%', ?, '%') 
GROUP BY client.id 
ORDER BY client.id DESC 

내 테이블은 다음 (CORRECT)를 재생하기 : 코드 MySQL과

-description-------name----------locale 
------------------------------------------- 
Dude...   Testing   Paris 
No stop   Another   null 
Representing null   null 
stackover  OneMore   London 

위, 내가로 변경하면 내가이 이상한 결과를 가지고 원하는 :

SELECT client.description, client.name, loc.description 
FROM clients AS client 
LEFT JOIN FromWhere AS from ON from.id = client.id_from 
LEFT JOIN locale AS loc ON loc.id = from.id_loc 
client.description LIKE CONCAT('%', 'stackover', '%') 
AND IFNULL(client.name, '') LIKE CONCAT('%', 'OneMore', '%') 
AND IFNULL(loc.description, '') LIKE CONCAT('%', 'OK', '%') 
GROUP BY client.id 
ORDER BY client.id DESC 



    -description-------name----------locale 
    ------------------------------------------- 
    stackover  OneMore   OK 

로를 당신은 "로케일"-> 확인이 존재하지 않는 것을 볼 수 있습니다. 이것은 몇 가지 값이 있습니다. 그리고 나는 그들 사이의 연결을 이해할 수 없습니다.

아이디어가 있으십니까?

+2

키워드이기 때문에 앨리어스'from' 주위에 백틱을 넣어야합니다. 'ON loc.id = from.id_loc'과'client.description LIKE CONCAT ('%', 'stackover', '%') 사이에 부울 연산자 (또는 가능한 경우)가 누락되었습니다. – AgRizzo

+0

두 번째 연산자는 .. 여기를 지나서 적응할 수 있도록 사람들이 이해할 수 있도록 어떻게 든 잊어 버렸습니다. – user3065191

답변

1

문제가 나는 다음과 같은 SQL 바이올린에 테이블을 다시 한

어디 확실하지 않다, 사물이 잘 작동 할 것으로 보인다.

위치 설명에 대한 필터를 주석 처리/주석 처리를 제거하고 확인하십시오.

http://sqlfiddle.com/#!2/8f6a4c/8

당신이 만족스럽지 않을 경우, 특정 시나리오와 바이올린을 업데이트하십시오 수 있습니다.

+0

당신에게 보여주는 문제는 내가 레코드가 많다는 것입니다. 왜냐하면 우편 번호가있는 테이블에 조인하기 때문입니다. SQLFiddle에서 동일한 오류가 발생했다고 생각합니다. http://sqlfiddle.com/#!2/8d18b/9 나는 적응하려고 노력했기 때문에 +/- 테이블과 필드를 이해할 수있었습니다. – user3065191

+0

Btw, 원래 코드에서 "GROUP BY"를 제거하면 같은 ID로 존재하지 않는 수천 개의 레코드가 중복됩니다 !! – user3065191

+1

GROUP BY를 잘못 사용하고 있습니다. 레코드가 중복되는 이유는 다른 마을에 대해 동일한 id_town을 사용했기 때문입니다. http://sqlfiddle.com/#!2/fbc94d/1을 참조하십시오. –

관련 문제