SQL Join на 3 таблицы - PullRequest
       1

SQL Join на 3 таблицы

0 голосов
/ 07 апреля 2011

Вот мой запрос:

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 

Вот что я пытаюсь сделать:

Получить все вызовы из таблицы 1 и получить клиента из таблицы 2. Затем получитьвсе продажи из таблицы 3 и покупателя из таблицы 2.

Я получаю все звонки, клиента, и затем, если есть заказ для этого клиента, я получаю и его.Что я хочу, так это все заказы.

Просто ищу несколько указателей на объединение 3 таблиц.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Как правило, я бы начал с таблицы, из которой вы хотите получить ВСЕ данные, той таблицы, из которой вы будете составлять основу вашей навигации к другим объектам .:

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
0 голосов
/ 07 апреля 2011

Вам нужно подумать о том, как вы собираетесь обрабатывать звонки и результаты продаж, поскольку между звонками и продажами, похоже, нет корреляции.Таким образом, клиент с 3 вызовами и 4 продажами выдаст 12 строк в наборе результатов. Здесь мы могли бы помочь вам лучше, если вы предоставите больше подробностей.

Концепция заключается в том, что если вызовы являются обязательным требованием, то вы можете сделать что-то вроде ...

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
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...