SQL-запрос - таблица из поля - PullRequest
2 голосов
/ 29 декабря 2011

Это моя ситуация. У меня есть разные таблицы, например:

ТАБЛИЦА A

Name | Phone              
John   123   
Mick   233

ТАБЛИЦА B

Department | Position          
IT            xxx   
HR            yyy

И следующая таблица конфигурации создается динамически через Интернет:

ТАБЛИЦА C

Source | Field  
TABLE A    Name   
TABLE B    Department

Когда я запускаю приложение, я читаю Таблицу C и мне нужно сгенерировать данные. В этом случае мне нужно перечислить все имена из ТАБЛИЦЫ A и все отделы из ТАБЛИЦЫ B.

Как я могу запросить это? Я надеюсь, что кто-нибудь может мне помочь.

Ура!

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Если вам нужно сделать это в SQL - что я бы не рекомендовал, если вы не можете доверять содержимому ТАБЛИЦЫ C - тогда вам нужно будет создать переменную, содержащую SQL-запрос, а затем выполнить этот SQL-запрос динамически. Как это сделать, будет полностью зависеть от вашей СУБД. Пример в MySQL (который предполагает, что TABLE C имеет только одну строку):

SELECT @sql:=CONCAT("SELECT ",field," FROM ",source) FROM TABLE_C;
PREPARE s1 FROM @sql;
EXECUTE s1;

Синтаксис SQL Server:

DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO

Поскольку в TABLE C, безусловно, будет более одной строки, вам придется выполнять итерации по TABLE C. Это можно сделать с помощью CURSOR, и опять точные детали будут зависеть от вашей СУБД.

Важно знать, что это очень опасно, если, как вы утверждаете, TABLE C создается из Интернета. Вы не можете гарантировать, что находится в полях FIELD и SOURCE: они могут быть заполнены атакой sql-инъекции любым человеком с небольшим знанием SQL. Что вам, возможно, понадобится сделать, это безопасно проверить, что содержимое таблицы C представляет собой фактические таблицы / столбцы с помощью мета-запросов базы данных с безопасными параметрами.

0 голосов
/ 29 декабря 2011
 select ta.Name, tb.Department 
 from TABLEA ta, TABLEB  tb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...