Почему View, который использует таблицу поиска подмножества, генерирует в 5 раз больше результатов, чем просмотр, использующий таблицу поиска большего размера? - PullRequest
0 голосов
/ 30 октября 2019

Цель : Мне нужно создать представление, которое использует таблицу поиска подмножества, отличную от обычной таблицы поиска, которая у меня уже есть. Мне нужно только 6 строк в таблице поиска подмножества, но для испанского перевода нужен новый столбец.

Проблема : представление возвращает намного больше результатов, чем должно быть.

Резюме : у меня 2 просмотра. Один из них использует таблицу поиска с сотнями строк. Один из них использует таблицу поиска только с 6 строками. Представление, использующее эту меньшую справочную таблицу, так или иначе имеет 5-кратное количество результатов (3000 против 15 000). Как это возможно?

Что я пробовал : Я попробовал множество вариантов таблиц и представлений, чтобы прийти к этому выводу. Неважно, какие значения я ищу в операторе SELECT. Единственное, что делает разницу, это использование меньшего справочного стола, который на самом деле увеличивает результаты просмотра.

SELECT slt.Name as Specialty,
s.ProviderName as ProviderName
from Database.dbo.some_table s
left outer join Database.some_other_table so on sa.randomfield = s.randomfield
left outer join Database.third_table tt on tt.thirdrandomfield = s.randomfield
left outer join Database.Smaller_Lookup_table slt on slt.SPECIALTY_ID = tt.SPECIALTY_ID

VS

SELECT llt.Name as Specialty,
s.ProviderName as ProviderName
from Database.dbo.some_table s
left outer join Database.some_other_table so on sa.randomfield = s.randomfield
left outer join Database.third_table tt on tt.thirdrandomfield = s.randomfield
left outer join Database.Larger_Lookup_table llt on llt.SPECIALTY_ID = tt.SPECIALTY_ID

Исходная таблица поиска:

DB Table Original/Larger

Меньше Таблица поиска:

DB Table Smaller

1 Ответ

0 голосов
/ 30 октября 2019

По крайней мере одно из ваших объединений должно возвращать более одной строки. Самый простой способ выяснить, какой из них состоит в построении окончательного запроса, выполнить эти запросы:

SELECT COUNT(*)
from Database.dbo.some_table s;

, затем присоединиться к первому

SELECT COUNT(*)
from Database.dbo.some_table s
left outer join Database.some_other_table so on sa.randomfield = s.randomfield;

, а затем присоединиться ко второму. а также

SELECT COUNT(*)
from Database.dbo.some_table s
left outer join Database.some_other_table so on sa.randomfield = s.randomfield
left outer join Database.third_table tt on tt.thirdrandomfield = s.randomfield;

и затем присоединитесь к третьему

SELECT COUNT(*)
from Database.dbo.some_table s
left outer join Database.some_other_table so on sa.randomfield = s.randomfield
left outer join Database.third_table tt on tt.thirdrandomfield = s.randomfield
left outer join Database.Smaller_Lookup_table slt on slt.SPECIALTY_ID = tt.SPECIALTY_ID;

Как только вы это сделаете, вы узнаете, какое объединение вызывает дополнительные строки, и выможет исследовать предикаты предложения ON для этой таблицы.

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