gpt4 book ai didi

MySql LEFT JOIN ON(前 6 个字母)

转载 作者:行者123 更新时间:2023-11-29 04:36:37 24 4
gpt4 key购买 nike

是否有可能 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com