【问题标题】:MYSQL SELECT - Can't select matching strings from joined tablesMYSQL SELECT - 无法从连接表中选择匹配的字符串
【发布时间】: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);

标签: mysql select workbench


【解决方案1】:

当我将 dolp21 表导出为 CSV 文件,然后在 Notepad++ 中打开 CSV 文件时,我发现每个电子邮件地址后跟引号内的两个回车符,当然还有每行末尾的换行符,例如所以:

"name@company.comCRCR"LF "person@business.comCRCR"LF

我运行了一个更新查询来清理它,现在我的选择查询可以工作了!

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 2023-03-27
    • 2011-06-22
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多