0

我的数据库中有两个 MySQL 表,它们的结构相同,SOURCE 和 TARGET。

我用来连接两者的外键是“电子邮件”列。

基本上,TARGET 仅包含经过验证的电子邮件列表,它是 SOURCE 中电子邮件的子集,其中还包含其他从电子邮件中键入的地址数据。我需要从 SOURCE 中提取所有具有有效电子邮件的记录。很简单吧?似乎无法让 MySQL 做到这一点......

这是我的查询:

SELECT
  email,
  firstname,
  lastname,
  address,
  city,
  state,
  zip,
  phone
FROM Source 
WHERE email IN
  (SELECT email FROM Target);

当我这样做时,我得到零记录;但我知道这SELECT email FROM Target行得通,而且我知道 SOURCE 包含电子邮件。

我正在尝试在 MySQL Workbench 5.2.34 中执行此操作,其中查询运行没有错误......但不产生任何输出。(而且我知道服务器正在运行等)

4

2 回答 2

1

你的代码工作得很好。如果没有看到任何数据,就不可能说出导致问题的原因,但可能还有其他问题您没有向我们展示。

工作小提琴:

http://sqlfiddle.com/#!2/7d505/1

架构:

Create table Source(
  email varchar(30),
  firstname varchar(30),
  lastname varchar(30),
  address varchar(30)
);

Create table Target(
  email varchar(30)
);


Insert into Source (email, firstname, lastname, address) VALUES('jack@gmail.com', 'jack', 'smith', '123 pine lane');
Insert into Source (email, firstname, lastname, address) VALUES('fake@gmail.com', 'fake', 'name', '456 pine street');

Insert into Target (email) VALUES('jack@gmail.com');

查询:

SELECT
  email,
  firstname,
  lastname,
  address
FROM Source 
WHERE email IN
  (SELECT email FROM Target);

结果:

jack@gmail.com  jack    smith   123 pine lane
于 2013-04-08T01:59:25.347 回答
0

我实际上已经弄清楚了……对于这篇文章的红鲱鱼感到抱歉:问题是用于创建 TARGET 表的导入文件中的额外换行符 (\n) 字符。MySQL 中的 TRIM 函数对此没有任何作用,但这就是连接不起作用的原因。一旦我删除了导入文件中的额外换行符,并重新导入了表格,瞧!代码工作...

于 2013-04-08T22:27:48.483 回答