2016-12-29 3 views
2

Ich habe versucht, einen Eintrag hinzuzufügen, je nach vorhandenen Eintrag in einer anderen Tabelle mit MySQL: aber die „Lösung“ (I aus einer anderen Frage habe, bevor ich gefragt) nicht korrekt auf meinen Daten zu arbeiten und ich weiß nicht, warum ...einen Eintrag hinzufügen, je nach vorhandenen Eintrag in einer anderen Tabelle mit MYSQL Teil 2

Hier ist die Frage, die ich habe die Lösung aus:

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

Hier ist meine Frage, wo ich die notwendigen Tabellen und Daten importieren zu erstellen:

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

Hier sind die 2-Abfragen Ich habe versucht, (wo ich die Lösungen in verwendet):

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; 

Beide arbeiten aber sie zeigen mir „nein“ für jeden Eintrag (was nicht korrekt ist): Wo ist der Fehler /Problem?

Info: Der Datentyp der Spalten in der Tabelle ABC lautet: customerID = int (10); Bestellnummer = varchar (50), KundenEmail = varchar (255);

+0

Enthält ABC gültige Daten? –

+0

Ja, über 300.00 Einträge/Reihen – AbsoluteBeginner

Antwort

0

Ist das nicht viel einfacher mit einem LEFT JOIN und 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 

Und bitte bitte Begriffe wie E-Mail mit einem - in der Mitte der es als Spaltennamen nicht verwenden. Bitte versuchen Sie, alle Kleinbuchstaben für Spalten- und Tabellennamen zu verwenden. Und geben Sie sinnvolle Namen statt ABC

Eine numerische Spalten wie Bestellnummer sollte numerisch sein (in diesem Fall int) und nicht varchar.

nicht zuletzt lange Spalte alias wie Did the customer ordered already? werden selten verwendet. Dies geschieht auf der Anwendungsebene zur Anzeigezeit.

+0

wie dies scheint auch nicht funktionieren: weiß nicht, wo der Fehler ist ... – AbsoluteBeginner

+0

bitte nie den Begriff ‚Problem‘. erkläre klar, was passiert ist. – e4c5

+0

ok, sorry- Es gibt eine dritte Spalte mit dem Namen CASE WHEN EMailImport.E-Mail ist NULL DANN 'Nein' ELSE 'Ja' ENDE und alle Einträge in dieser Spalte sind nein (was nicht stimmt, weil einige der EMailadressen in Tabelle ABC gibt es definitiv in EMailImport) – AbsoluteBeginner

Verwandte Themen