2017-01-11 3 views
0

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

Мой запрос:

SELECT 
    [key], [ctankid], [dbo].[tbltanks].[csiteid], 
    [dbo].[jobdata].[jobname], [ctankname], [ctanknameabbr], 
    [cshousepartid], [cshousemodel], [csfiltermodel], [ddatecreated] 
FROM 
    [sensordb].[dbo].[tbltanks] 
JOIN 
    jobdata ON [dbo].[tbltanks].[csiteid] = [dbo].[jobdata].[csiteid] 
WHERE 
    cshousemodel IS NULL 
    AND csfiltermodel IS NULL 
    AND ddatecreated > '2010-01-01' 
ORDER BY 
    ddatecreated DESC 

Результаты:

Query results

+4

Таблицы могут иметь отношение «1: N» –

+0

Есть ли способ исправить или ограничить это в запросе? –

+0

Используйте ключевое слово 'DISTINCT' после' SELECT'. Лучше всего понять, почему ваши предположения, что у вас уже есть отдельные записи, не соответствуют вашим данным. – JNevill

ответ

0

Что у вас есть ситуация, когда у вас есть один ко многим отношений. Из-за этого в дочерней таблице есть несколько записей.

Теперь вопрос заключается в том, как определить, какую запись выбрать. Это бизнес-правило, на которое мы не можем ответить. Однако я могу сделать некоторые предложения.

Во-первых, какое-то поле не возвращается, что приводит к возврату двух записей? Если это так, то DISTINCT должен устранить проблему. Обратите внимание, что отличительная особенность не обязательно будет быстрым решением. Если у вас проблемы с производительностью с использованием отдельных, вам может потребоваться рассмотреть предложение where, чтобы ограничить записи.

Если несколько записей имеют разные значения для одного или нескольких возвращаемых полей, они не обязательно повторяются. Возможно, вам нужно вернуть обе записи или, возможно, вам нужно добавить предложение where для запроса, чтобы ограничить записи в дочерней таблице тем, который вы хотите. Например, если вы запрашивали адреса, то вы можете выбрать конкретный тип адреса, чтобы получить только одну запись. Что такое предложение where where может быть бизнес-правило, которое может исходить только из ваших бизнес-требований.

Другая возможность заключается в том, что вам нужно агрегировать значения для одного или нескольких полей. Таким образом, функции GROUP BY и aggregate могут быть вам нужны. Опять же, это сводится к тому, что является вашим конкретным бизнес-правилом.

Смежные вопросы