2016-12-29 71 views
2

我试图添加一个条目,这取决于MySQL中另一个表中的现有条目:但“解决方案”(我从之前询问的另一个问题得到)不是我的数据正确地工作,我不知道为什么......根据MYSQL第二部分中另一个表中的现有条目添加一个条目

下面是我从解决问题:

Add an entry depending on existing entry in another table with MYSQL

这里是我的查询,我创建必要的表和导入数据:

CREATE TABLE `EMailImport` (user_id VARCHAR(20), `E-Mail` VARCHAR(150)); 
LOAD DATA LOCAL INFILE 'C:/Users/xyz/Desktop/X/export.csv' 
INTO TABLE `EMailImport` 
FIELDS TERMINATED BY ';' 
LINES TERMINATED BY '\n'; 
DELETE FROM `EMailImport` LIMIT 1; 
CREATE INDEX X ON `EMailImport` (`E-Mail`); 
CREATE TABLE ABC AS SELECT customerID, ordernumber, `customersEmail` 
FROM orders GROUP BY `customersEmail`; 
CREATE INDEX Y ON ABC (`customersEmail`); 

这里有2个查询我想(我曾经在溶液):两者都是工作

SELECT ABC.*, CASE WHEN `customersEmail` IN (SELECT `E-Mail` FROM EMailImport) THEN 'Yes' ELSE 'No' end AS `Did the customer ordered already?` FROM ABC; 

SELECT ABC.*,CASE WHEN EXISTS (SELECT * FROM EMailImport WHERE EMailImport.`E-Mail` = ABC.`customersEmail`) then 'yes' else 'no' end as `Did the customer ordered already?` from ABC; 

,但他们告诉我“没有”为每个条目(什么是不正确的):哪里是错误/问题?

Info:表ABC中列的数据类型为:customerID = int(10); ordernumber = varchar(50),customersEmail = varchar(255);

+0

ABC是否包含有效数据? –

+0

是的,约300.00条目/行 – AbsoluteBeginner

回答

0

LEFT JOIN和COALESCE不是更简单吗?

SELECT ABC.*, 
    CASE WHEN EMailImport.`E-Mail` IS NULL THEN 'No' ELSE 'Yes' END 
    AS `Did the customer ordered already?` 
FROM ABC LEFT JOIN EMailImport on EMailImport.`E-Mail` = ABC.customersEmail 

并请请不要在它的中间列名使用像E-Mail方面有-。请尝试使用全部小写字母作为列名和表名。并给出有意义的名称而不是ABC

像订单号这样的数字列应该是数字(在本例中为int)而不是varchar。

最后但并非最不重要的长列别名像Did the customer ordered already?很少使用。这是在显示时间在应用程序层完成的。

+0

看起来像这样也不工作:不知道错误在哪里... – AbsoluteBeginner

+0

请不要使用术语'不工作'。清楚解释发生了什么。 – e4c5

+0

好的,对不起 - 有第三列名为CASE WHEN EMailImport.E-Mail'为NULL,然后'否''是'结束,并且此列中的所有条目均为否(什么是不正确的,因为有些表ABC中的EMailaddresses的确定存在于EMailImport中) – AbsoluteBeginner

相关问题