У меня есть одна таблица данных, которая содержит кучу информации, которую я пытаюсь отобразить. Всего 3057 записей, так что я ожидаю, что мой последний запрос получит 3057 записей.
По сути, я хочу иметь возможность создать оператор SELECT
, который позволит мне включить столбец в исходный таблица, переводящая этот конкретный столбец (в основном, строка имеет идентификатор, но эта же таблица также может преобразовать идентификатор в имя Publi c).
Легко сделать базовое c соединение, и добавьте столбец на основе указанного c фильтра / поиска:
DefView = '(None)' AND DefType = 'DefPublicName' -- 250 records
. В результате я получу все записи с именами, которые можно перевести. Так что теперь я могу добавить этот столбец к своему начальному SELECT
и быть в пути.
Проблема в том, что мое количество записей теперь полностью отключено. Я полагаю, что он пропускает предметы, которые он не нашел, когда я сделал JOIN
. Я получаю 2342 записи, скорее всего, потому что есть данные, которые не связаны, когда мы создаем предложение JOIN ON
.
Другой способ сказать это, я полагаю, состоит в том, что мы только добавляем "действительный" Msgstr "Столбцы PublicTitle, которые существуют в настоящее время. Поэтому, если у нас есть строки без этой информации, она, по сути, исключается.
В то время как функциональность, которую я хочу, - это включить ее, а если у нас нет PublicTitle, она может быть NULL
/ пустой.
Поскольку я знал, что мы пропускаем записи, я подумал, что UNION
поможет вернуть пропавшие записи. Просто возникают проблемы с получением точного запроса с общим количеством строк 3057, когда все сказано и сделано.
SELECT
TD.RecID,
TD2.DefName AS PublicTitle,
TD.DefType,
TD.DefID,
TD.DefName,
TD.DefView,
TD.DefOwner
FROM DefinitionTable AS TD --3057
JOIN DefinitionTable TD2 ON TD.DefOwner = TD2.DefID -- 4213
WHERE TD2.DefView = '(None)' AND TD2.DefType = 'DefPublicName' --2342.
UNION (SELECT TD3.RecID,
'' AS PublicTitle,
TD3.DefType,
TD3.DefID,
TD3.DefName,
TD3.DefView,
TD3.DefOwner FROM DefinitionTable TD3 WHERE TD3.DefView != '(None)' AND TD3.DefType != 'DefPublicName') --2713