Я использую внутреннее соединение или левое соединение? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть две отдельные таблицы, из которых я извлекаю данные, а associate_id является первичным ключом.Я пытаюсь найти все продажи (sales_charge, найденные в sales.dim), сделанные Associate_ID за несколько транзакций за последние 4 месяца и в прошлом году.Мне тяжело с отметкой времени и соединениями.

Вот что у меня есть:

SELECT associate_id
, sales.dim.sales_charge
FROM dbo.associate
LEFT JOIN dbo.sales ahd
ON associate_id = ahd.associate_id
AND ahd.end_dt > GETDATE()

Я новичок в SQL и кодировании в целом, пожалуйста, дайте мне знать, что мне не хватает.

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Ответ на вопрос "Использую ли я внутреннее соединение или левое соединение?"заключается в том, что вы используете внутреннее объединение, когда хотите включить только совпадающие записи из обеих таблиц, тогда как левое (внешнее) объединение будет включать все записи из левой боковой таблицы.

В запросе, который вы пытаетесь включить в список результатов, чтобы все партнеры были включены, даже если у них не было продаж в последние 4 месяца, используйте LEFT JOIN.Если вы хотите иметь только тех партнеров, у которых есть один или несколько продаж, используйте INNER JOIN.

Другая проблема связана с условием "ahd.end_dt> GETDATE ()".Это означает все даты окончания после текущего времени.Измените его на «ahd.end_dt> DATEADD (month, -4, GETDATE ())»

0 голосов
/ 22 мая 2018

Если вы хотите включить всех сотрудников, даже тех, у которых нет продаж, используйте left join:

SELECT a.associate_id, ahd.dim.sales_charge
FROM dbo.associate a LEFT JOIN
     dbo.sales ahd
    ON a.associate_id = ahd.associate_id AND
       ahd.end_dt > DATEADD(month, -4, GETDATE());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...