Как избежать перекрестного соединения - PullRequest
0 голосов
/ 09 марта 2011

У меня есть запрос, который вычисляет сумму / количество сумм (QTY) для префикса для конкретного клиента.Префикс был использован вместо продукта для сокращения версий / наименований вариантов.

Этот запрос выполняется для двух отдельных таблиц, связанных внешним ключом, где client_ID - это общий атрибут и первичный ключ в третьей таблице.Одна таблица называется Закуплена, а другая Установлена.

Я пытаюсь рассчитать разницу между установленным и приобретенным количеством, а также количеством дополнительных полей в каждой таблице.Концепция похожа на проверку запасов (Amountinstock - AmountSold).

Проблема, с которой я сталкиваюсь, заключается в том, что это создает перекрестное соединение для результата.Каковы методы, чтобы избежать перекрестного соединения?Решат ли это внешние, правые или левые объединения или мне нужно использовать оператор объединения.

Таблицы следующие:

Client  ( Client_ID*, Client) 
Purchased (Client_ID, Product, Prefix, License Status, Amount, Deployed at, Start_date, End_date) 
Installed (Client_ID, Product, Prefix, Publisher, Version, Domain, Server, Amount) 
*Primary Key 

Количество кода запроса префикса и клиента:

SELECT 
    Installed.Client_ID, 
    Client.Client, 
    Installed.Prefix, 
    SUM(Installed.Amount) AS QuantityofLicensesInstalled
FROM Installed 
    INNER JOIN Client 
        ON Installed.Client_ID=Client.Client_ID
GROUP BY Installed.Client_ID, Installed.Prefix, Client.Client;

Код, пытающийся присоединиться к результатам:

SELECT 
    Installed.Prefix, 
    QuantityofLicensesInstalled, 
    Purchased.Prefix, 
    QuantityofLicensesPurchased, 
    (QuantityofLicensesInstalled-QuantityofLicensesPurchased) AS Differencebetweenvalues
FROM ClientIDPrefixSumInstalled, ClientIDPrefixSumPurchased;

В настоящее время создается результат перекрестного соединения.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Первый: удалить столбец клиента из ClientIDPrefixSumPurchased и ClientIDPrefixSumInstalled как из предложения select, так и из группы на.

Тогда это может привести к тому, что вам нужно.

SELECT 
    Installed.Prefix, 
    QuantityofLicensesInstalled, 
    Purchased.Prefix, 
    QuantityofLicensesPurchased, 
    (QuantityofLicensesInstalled-QuantityofLicensesPurchased) AS Differencebetweenvalues
FROM ClientIDPrefixSumInstalled 
full outer join ClientIDPrefixSumPurchased on installed.prefix = purchased.prefix;
0 голосов
/ 09 марта 2011

Получить один список всех префиксов, представленных в обеих таблицах, получить общую сумму для каждого префикса в каждой таблице, а затем объединить итоги в левом списке со списком префиксов, чтобы вычислить разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...