이 조건 a.remarks = b.courierCode
와 조회가 일치하는 행을 찾을 않는 점을 감안하고, 우리가 '112233GOODAY'
로 remarks
열에있는 값의 예를 나타낸 것을 감안는 remarks
컬럼 캐릭터 타입이라고 추측. 또한 비교가 문자열 값에 이 아닌이라고 결론을 내릴 수 있습니다.
숫자 컨텍스트에서 계산 된 문자열 값 '112233GOODAY'
은 112233
의 숫자 값으로 해석됩니다. 따라서 암시적인 데이터 유형 변환이 발생한다는 것을 알고 있으므로 remarks
이 숫자로 변환됩니다. 동일한 전환이 LEFT()
함수에서 반환 될 때 발생해야합니다.
데모 설치 :
CREATE TABLE master_listing
(id INT UNSIGNED PRIMARY KEY
, remarks VARCHAR(12)
);
INSERT INTO master_listing (id, remarks)
VALUES (1,'112233GOODAY');
CREATE TABLE courier_information
(id INT UNSIGNED PRIMARY KEY
, couriercode INT UNSIGNED
, uid INT UNSIGNED
);
INSERT INTO courier_information (id, couriercode, uid)
VALUES (1,112233,27);
데모 쿼리 예상대로
SELECT b.UID
FROM master_listing a
LEFT
JOIN courier_information b
ON LEFT(a.remarks, 6) = b.courierCode
;
출력 :
이 공개되지 않았 음을 계속 뭔가가있다 UID
------
27
. 필자는 열의 데이터 유형에 대해 가정했습니다.
내 생각 엔 그냥 짐작하면 remarks
열에 선행 공백이 있다는 것입니다. 값을 검사하기 위해, 출력 추가 열 디버깅
... remarks
값이 선행 공간이 있으면
SELECT a.id
, a.remarks
, LEFT(a.remarks,6)
, HEX(a.remarks)
FROM master_listing a
WHERE a.id = 1
는 다음 LEFT(remarks,6)
가 ' 11223'
로 평가하고, 숫자 관련하여 비교하는 것 가 112233
과 같지 않습니다.
'SELECT b.UID' 대신'SELECT *'를했을 때의 결과는 무엇입니까? 디버깅에 도움이 될 수 있습니다. – Pang
LEFT가 문자열을 반환 할 것이고 내 추측은 couriercode가 문자열이 아닌 것입니까? 따라서 'LEFT (a.remarks, 6)'을 택배 코드와 동일한 데이터 유형으로 변환해야합니다. 전송 해보세요. – MageeWorld
@Pang 같은 결과가 NULL이지만, 단지'ON'에서'a.remarks = b.courierCode'를 사용할 때. –