根据MYSQL第2部分的另一个表中的现有条目添加条目

时间:2016-12-29 09:33:19

标签: 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`);

以下是我尝试过的两个查询(我在哪里使用了解决方案):

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);

1 个答案:

答案 0 :(得分: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?这样冗长的列别名。这是在展示时在应用层完成的事情。