我的数据库中有两个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中执行此操作,其中查询运行时没有错误...但不产生输出。 (我知道服务器正在运行,等等。)
答案 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函数对此没有任何作用,但这就是连接不起作用的原因。一旦我删除了导入文件中的额外换行符,并重新导入了表格,瞧!代码工作......