作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有可能 LEFT JOIN
并在 ON
中仅使用 6 个字母?
这是我的代码。
SELECT
b.UID
FROM master_listing AS a
LEFT JOIN courier_information AS b ON LEFT(a.remarks, 6) = b.courierCode
master_listing 表
id remarks
1 112233GOODAY
express 信息表
id courierCode UID
1 112233 27
不幸的是,我上面的查询不起作用,它返回 NULL。
有什么办法吗?
提前致谢。
最佳答案
当没有“匹配"在 b
中找到的行。 (将返回 a
中的行,MySQL 将为 b
中的所有列返回 NULL 值。)
您似乎在问为什么 b
中的行没有被匹配;为什么比较测试没有为任何行返回 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);
演示查询:
SELECT b.UID
FROM master_listing a
LEFT
JOIN courier_information b
ON LEFT(a.remarks, 6) = b.courierCode
;
预期的输出:
UID
------
27
有些事情你还没有透露。我对列的数据类型做了假设。
我的猜测(只是一个猜测)是remarks
列中有一个前导空格。
为了调试这个,输出额外的列来检查值...
SELECT a.id
, a.remarks
, LEFT(a.remarks,6)
, HEX(a.remarks)
FROM master_listing a
WHERE a.id = 1
如果 remarks
值有一个前导空格,那么 LEFT(remarks,6)
将评估为 '11223'
,并比较在数字上下文中,它不等于 112233
。
关于MySql LEFT JOIN ON(前 6 个字母),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39864997/
我是一名优秀的程序员,十分优秀!