Sql — возвращает значение для КАЖДОЙ вещи, которую ищут в команде select, даже если она повторяется или не существует

#sql #excel #ms-access #vba #jet-sql

#sql #excel #ms-access #vba #jet-sql

Вопрос:

Как следует из названия, я хочу запустить оператор select, чтобы вернуть 1 значение для каждого элемента, с которым выполняется поиск. Я приведу простой пример для этого.

Допустим, что моя таблица выглядит следующим образом:

 table1

Mdl       Code
Model     Model Code
M1070     32HT
M1060     32A4
 

где table1 — это таблица, Mdl и Code — столбцы, и есть две записи.

Теперь допустим, что у меня есть список, который делает так, чтобы мне нужно было преобразовать коды моделей в модели. В этом списке могут быть коды моделей, найденные в table1, в нем могут быть записи, не найденные в table1, и в нем могут быть записи, которые повторяются при поиске. Мой вопрос в том, как (в обобщенном смысле, поскольку мои данные более сложные) я могу запустить следующий пример поиска:

 32HT
32HT
32HM
NULL (blank entry in searching)
 

В идеале мне бы хотелось, чтобы она возвращала следующее:

 M1070
M1070
"" (a null or blank value as a place holder so the lists stay in line)
"" (a null or blank value again)
 

Важность этого заключается в том, что возвращаемые значения всегда должны что-то возвращать, иначе список, в который он сбрасывается, может сбиться.

Заранее спасибо.

Чтобы прояснить некоторые вещи, список будет сгенерированным списком (то есть не из существующей таблицы). Я также использую JET SQL, чтобы ограничить некоторые доступные функции SQL.

Ответ №1:

 SELECT l.Code, COALESCE(t.mdl, '') as mdl
    FROM List l
        LEFT JOIN table1 t
            ON l.Code = t.Code
 

Комментарии:

1. Это на правильном пути, но список будет введен (сгенерирован). Извините за путаницу

2. @EricF Я бы посоветовал вам сохранить этот введенный список во временной структуре таблицы и использовать указанный запрос.

3. Не могли бы вы привести пример этого? Извините за отсутствие опыта

4. «JET SQL» подразумевает механизм базы данных Access, и в этом случае временные таблицы не являются опцией и COALESCE() недоступны (но могут быть переписаны как IIF(t.mdl IS NULL, '', t.mdl) ).

5. SQL — это общий тег, jet-sql специфичен.

Ответ №2:

Список поступает из другой таблицы? Если это так, внешнее соединение между двумя таблицами должно сохранять значения null.

 SELECT * FROM listtable
LEFT OUTER JOIN table1
 

Комментарии:

1. Нет, параметры поиска будут введены. Извините за путаницу

2. @EricF Я бы рекомендовал просмотреть эту статью для получения заметок о том, как записывать данные в таблицу, и просто объявить временную таблицу для объединения с существующей таблицей.