2016-12-29 31 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

相關問題