Вставить / перевести столбец из другой таблицы? - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть одна таблица данных, которая содержит кучу информации, которую я пытаюсь отобразить. Всего 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

1 Ответ

0 голосов
/ 23 февраля 2020

Уверен, я понял это следующим образом:

Select
(SELECT TOP 1 DefName As PublicTitle From DefinitionTable  TD1 Where TD1.DefID = TD2.DefOwner AND TD1.DefView = '(None)') As PublicTitle
, * From DefinitionTable TD2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...