是否可以LEFT JOIN只使用 6 个字母ON?
这是我的代码。
SELECT
b.UID
FROM master_listing AS a
LEFT JOIN courier_information AS b ON LEFT(a.remarks, 6) = b.courierCode
Run Code Online (Sandbox Code Playgroud)
master_listing表
id remarks
1 112233GOODAY
Run Code Online (Sandbox Code Playgroud)
快递信息表
id courierCode UID
1 112233 27
Run Code Online (Sandbox Code Playgroud)
不幸的是我上面的查询不起作用,它返回 NULL。
有什么办法可以做到这一点吗?
提前致谢。
当 中没有找到“匹配”行时,操作的b.anycolumn预期返回值为 NULL 。(将返回 中的行,并且 MySQL 将为 中的所有列返回 NULL 值。)a LEFT JOIN bbab
看起来您在问为什么行 fromb不匹配;为什么比较测试没有为任何行返回 TRUE。
您省略的是列的数据类型courierCode。
假设带有条件的查询a.remarks = b.courierCode确实找到了匹配的行,并且假设列中的示例值显示remarks为 '112233GOODAY',我们推测该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);
Run Code Online (Sandbox Code Playgroud)
演示查询:
SELECT b.UID
FROM master_listing a
LEFT
JOIN courier_information b
ON LEFT(a.remarks, 6) = b.courierCode
;
Run Code Online (Sandbox Code Playgroud)
输出如预期:
UID
------
27
Run Code Online (Sandbox Code Playgroud)
有一些事情正在发生,你还没有透露。我已经对列的数据类型做出了假设。
我的猜测(只是猜测)是该remarks列中有一个前导空格。
为了调试这个,输出额外的列来检查值......
SELECT a.id
, a.remarks
, LEFT(a.remarks,6)
, HEX(a.remarks)
FROM master_listing a
WHERE a.id = 1
Run Code Online (Sandbox Code Playgroud)
如果该remarks值有前导空格,则 的LEFT(remarks,6)计算结果为' 11223',并且在数字上下文中进行比较,结果不等于112233。
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |