#mysql #mariadb
Вопрос:
У меня есть база данных с несколькими таблицами, заполненными параметрами. У меня также есть таблица, в которой перечислены имена таблиц, в которых они отображаются, их идентификаторы (номер) и их имена, когда они отображаются в пользовательском интерфейсе. У меня есть отдельная таблица, в которой перечислены все параметры, присутствующие в каждой таблице, идентификатор таблицы, в которой они находятся, а также имя, которое параметры имеют в пользовательском интерфейсе.
Я хотел бы сделать запрос, который на основе пользовательского ввода преобразует имя пользовательского интерфейса в имя базы данных и запрашивает параметр из выбранной таблицы.
Я попробовал вложенный запрос SELECT, но встроенный запрос возвращает таблицу, а не строку, поэтому я не смог использовать ее в качестве входных данных для моего основного запроса.
Я также попытался объявить локальную переменную, которая будет содержать результат «перевода» из имени пользовательского интерфейса в имя базы данных. Я работаю с MariaDB и получил синтаксические ошибки при попытке объявить, для которых я не смог найти решение.
Поскольку у меня нет опыта работы с SQL, могут быть более очевидные или более простые решения, которых мне не хватает. Пожалуйста, дайте мне знать, есть ли другой способ, которым я должен подойти к этому, или если вы знаете проблему или ошибку, которую я допустил в своих попытках.
Мой вложенный запрос выглядел примерно так:
SELECT 'parameter' FROM ( SELECT 'table_dbname' FROM 'tables_dblist' WHERE 'table_UIname' = userinput ) AS tablequery
Моя попытка использовать объявленную переменную:
DECLARE @table_dbname as NVARCHAR(MAX) SET @table_dbname = ( SELECT 'table_dbname' FROM 'table_dblist' WHERE 'table_UIname' = userinput )
ввод пользователя будет рассмотрен позже, для того, чтобы запрос работал, я просто выбираю один фактический параметр и вставляю его имя в запрос вручную на данный момент.
Редактировать: В бд есть таблицы: table1, table2, table_dblist, table_parameterlist таблица 1 содержит несколько столбцов: время, параметр1, параметр2,.. и т. Д. В таблице 2 есть некоторые общие имена столбцов, в то время как остальные разные: время, параметр1, параметр2.1, … и т. Д. Список таблиц содержит 3 столбца:
- Идентификатор таблицы: содержит целое число для каждой таблицы, например, для таблицы1 идентификатор таблицы равен 1
- имя_таблицы: имя таблицы, как оно отображается в базе данных, например, таблица1
- table_UIname: имя, отображаемое в пользовательском интерфейсе, например, Первая таблица
список table_parameterlist также содержит 3 столбца:
- Идентификатор таблицы: идентификатор таблицы, в которой находится параметр, поэтому общие имена параметров можно различать
- parameter_dbname: имя столбца параметров, как оно отображается в базе данных, например параметр1
- parameter_UIname: имя, как оно отображается в пользовательском интерфейсе, например, Первый параметр
У меня будет форма, в которой пользователи выбирают имя table_UIname и имя параметра, которое находится в этой таблице. Я хотел бы получить запрос, который вернул бы выбранный параметр из указанной таблицы. например, пользователь выбирает вторую таблицу и третий параметр. Результат более сложного запроса, который я хочу написать, в этом случае будет таким же, как:
SELECT parameter3 FROM table2
Пожалуйста, дайте мне знать, если я смогу уточнить подробнее.
Комментарии:
1. Пожалуйста, отредактируйте вопрос и предоставьте примеры данных, описание таблицы и ожидаемый результат в текстовом формате
2. Спасибо за предложение, я добавил больше объяснений и пример того, чего я пытаюсь достичь,
3. Что касается маршрута объявления: основываясь на ответах на другие подобные вопросы, я попытался использовать разделители, опуская команду ОБЪЯВЛЕНИЯ, опуская префикс@, но, похоже, ничего не работает, я все еще продолжаю получать ту же синтаксическую ошибку.