2011-04-07 3 views
0

Voici ma question:SQL JOIN sur 3 tables

select custnmbr,custname,slprsnid,cdatetime,cdur,cnumber,cext, 
finalcalledpartynumber,sono,invno,ordamt,invamt,adduser 
from table1 calls left join table2 cust 
on (calls.number = cust.phone1 or calls.cext = cust.phone1) 
left outer join table3 sales on (cust.custnmbr = sales.custno 
and sales.adddate = @date) 
where (cnumber = @phone or cext = @phone) and cdatetime >= @date 

Voici ce que je suis en train de faire:

obtenir tous les appels de la table 1, et obtenir de la table 2. Ensuite, le client Obtenir toutes les ventes de la table 3 et le client de la table 2.

Ce que je reçois est tous les appels, le client, et puis s'il y a une commande pour ce client, je reçois aussi. Ce que je veux, c'est aussi toutes les commandes.

Vous recherchez simplement des pointeurs pour joindre 3 tables.

+1

Il serait utile de fournir des exemples de données et résultats attendus – RichardTheKiwi

+0

Cela aiderait. la question n'est pas très claire. – Slappy

+0

Ce qui aiderait également à ajouter les alias de table à toutes les colonnes utilisées. –

Répondre

0

Vous devez réfléchir à la façon dont vous allez gérer les appels et les résultats des ventes car il ne semble pas y avoir de corrélation entre les appels et les ventes. Ainsi, un client avec 3 appels et 4 ventes produira 12 lignes dans le jeu de résultats. C'est là que nous pourrions vous aider si vous fournissez plus de détails.

Le concept est que si les appels est une condition nécessaire, alors vous pourriez faire quelque chose comme ...

SELECT ca.CallId, ca.TimeStarted, ..., 
     c.CustomerId, c.FirstName, ..., 
     s.SaleDate, s.SaleAmount, ... 
FROM calls AS ca 
     INNER JOIN customers AS c ON ca.CustomerId = c.CustomerId 
     OUTER APPLY ( --or CROSS APPLY, depending on your needs 
      SELECT s.SaleDate, s.SaleAmount, ... 
      FROM sales AS s 
      WHERE s.CustomerId = c.CustomerId 
        AND s.SaleDate = ca.CallDate --It would help if this relationship existed 
     ) 
0

En général, je voudrais commencer par la table que vous voulez toutes les données, celui que vous vont former la base de votre navigation aux autres entités .:

SELECT 
    C.*, 
    Ca.*, 
    S.* 
FROM Sales S 
LEFT JOIN Customer C 
    ON (S.CustomerId = C.CustomerId) -- your condition 
LEFT JOIN Calls Ca 
    ON (C.CustomerId = Ca.CustomerId) -- your condition