我尝试根据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);
答案 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?
这样冗长的列别名。这是在展示时在应用层完成的事情。