Hallo,
ich hab ein spezielles problem mit einer SQL- Abfrage (MS SQL 2012)
Ich habe eine Tabelle CUSTOMER , eine Tabelle CONTACTS und eine Tabelle E_MAILS.
Ich bräuchte jetzt eine Abfrage, bei der ich:
1. den Customer bekomme wenn er keine Emial adresse hat (deswegen mein LEFT JOIN)
2. wenn der customer mehrere email- Adressen hat, möchte ich den Customer nur ein mal im ResultSet (deshalb der Subselect).
Mein Problem ist jetzt, dass sich 1. und 2. ausschließen.
Was kann ihc da noch machen. Ich will es nicht über den Applikationscode lösen, da das bei sehr vielen Einträgen in der Applikation sehr teuer werden kann.
Kann man da noch was machen - bin sehr dankbar für jeden hinweis.
Beste Grüße,
Generic1
SELECT
bc.ID,
e.E_MAIL_ADR
-- usw
FROM
CUSTOMERS bc JOIN LOCATIONS l ON bc.LOCATION_ID = l.ID
JOIN CONTACTS c ON bc.ID = c.CUSTOMER_ID
LEFT JOIN E_MAILS e ON e.CONTACT_ID = c.ID -- left join - also get customer if he has no email address
where
e.E_MAIL_ADR IN (select MAX(e.E_MAIL_ADR) FROM CUSTOMERS pc JOIN CONTACTS c ON pc.ID = c.CUSTOMER_ID
LEFT JOIN E_MAILS e ON e.CONTACT_ID = c.ID
GROUP BY pc.ID) -- get only one customer if he has more than one email address
ich hab ein spezielles problem mit einer SQL- Abfrage (MS SQL 2012)
Ich habe eine Tabelle CUSTOMER , eine Tabelle CONTACTS und eine Tabelle E_MAILS.
Ich bräuchte jetzt eine Abfrage, bei der ich:
1. den Customer bekomme wenn er keine Emial adresse hat (deswegen mein LEFT JOIN)
2. wenn der customer mehrere email- Adressen hat, möchte ich den Customer nur ein mal im ResultSet (deshalb der Subselect).
Mein Problem ist jetzt, dass sich 1. und 2. ausschließen.
Was kann ihc da noch machen. Ich will es nicht über den Applikationscode lösen, da das bei sehr vielen Einträgen in der Applikation sehr teuer werden kann.
Kann man da noch was machen - bin sehr dankbar für jeden hinweis.
Beste Grüße,
Generic1
SELECT
bc.ID,
e.E_MAIL_ADR
-- usw
FROM
CUSTOMERS bc JOIN LOCATIONS l ON bc.LOCATION_ID = l.ID
JOIN CONTACTS c ON bc.ID = c.CUSTOMER_ID
LEFT JOIN E_MAILS e ON e.CONTACT_ID = c.ID -- left join - also get customer if he has no email address
where
e.E_MAIL_ADR IN (select MAX(e.E_MAIL_ADR) FROM CUSTOMERS pc JOIN CONTACTS c ON pc.ID = c.CUSTOMER_ID
LEFT JOIN E_MAILS e ON e.CONTACT_ID = c.ID
GROUP BY pc.ID) -- get only one customer if he has more than one email address