为什么这个SELECT ... IN语句不起作用?

时间:2013-04-08 01:55:36

标签: mysql

我的数据库中有两个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中执行此操作,其中查询运行时没有错误...但不产生输出。 (我知道服务器正在运行,等等。)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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