【发布时间】:2023-03-27 15:18:01
【问题描述】:
我有一份即将举行的贸易展上注册人的电子邮件地址列表。我创建了这张表:
CREATE TABLE dolp21 (email VARCHAR(50) UNIQUE NOT NULL);
我的联系人表包含一列:email VARCHAR(50) NOT NULL
我正在尝试查看哪些注册人是现有客户。这是我在工作台中的查询,它返回 0 个结果并且没有错误,即使我可以立即看到几个我认为是现有客户的电子邮件地址:
SELECT CONCAT(c.firstName,' ',c.lastName) AS 'Contact'
FROM contacts c
JOIN dolp21 d ON TRIM(lcase(d.email))=TRIM(lcase(c.email))
ORDER BY c.lastName, c.firstName
;
知道为什么我没有得到任何匹配吗?
【问题讨论】:
-
为什么需要TRIM()?该值是否可能包含前导空格?为什么需要在 LCASE() 中?列是否有区分大小写的排序规则? 知道为什么我没有得到任何匹配项吗? 为两个表(使用 SHOW CREATE TABLE 获取)和 INSERT INTO(每个表 3-5 行)提供 CREATE TABLE,其值必须匹配但未选中。
-
包含电子邮件地址的注册电子表格是由第三方创建的,我无法确定是否存在空白。电子表格确实包含大量的大写字母,我们在输入电子邮件地址时不会使用这些字母。联系人的 create table 语句相当长,有 36 列,对于 INSERT INTO 语句,我通过 LOAD DATA INFILE 将电子邮件地址上传到 dolp21。
-
联系人的创建表语句相当长 与问题(和约束/索引)无关的列可以很容易地跳过,只有
email列定义和表选项需要(可能是联系人的名字/姓氏),对于示例数据也是如此。 我通过 LOAD DATA INFILE 将电子邮件地址上传到 dolp21 您必须在导入期间修剪所有值并将它们标准化为小写。 -
CSV 上传文件的编码是否重要(例如 UTF-8 等)?
-
CREATE TABLE 联系人(电子邮件 VARCHAR(50) NOT NULL);