(Spezielle) SQL Abfrage

Generic1

Benutzer
Beiträge
11
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
 
Werbung:
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).

Ohne mir Deinen Kot da näher anzuschauen ist ein LEFT JOIN schon okay - gegen eine Tabelle, die max. einen Datensatz je costumer liefert. Distinct und Co. sind Deine Freunde.
 
Werbung:
Ich denke mal du brauchst das hier (gibt sicher auch noch andere Wege):
Code:
SELECT    *
FROM    tabelle1
LEFT JOIN (
SELECT    ROW_NUMBER() OVER (PARTITION BY fk_tabelle1 ORDER BY beliebige_spalte) AS zeilennr,
        *
FROM    tabelle2
) t2
ON        t2.fk_tabelle1 = t1.pk
WHERE    t2.zeilennr IS NULL
OR        t2.zeilennr = 1
Da hab ich es jetzt nur mit zwei Tabellen gemacht aber das sollte sich anpassen lassen.
 
Zurück
Oben