Выберите, используя динамически генерируемое имя таблицы - PullRequest
1 голос
/ 04 августа 2011

У меня следующая проблема. Моя таблица (geo_table) имеет следующую структуру:

foreign_table_id | foreign_table_name | some_other_fields...

foreign_table_name хранит имена разных таблиц, а foreign_table_id хранит идентификаторы в этих таблицах. Я хочу проверить, хранит ли строка в вышеупомянутой таблице действительную ссылку на какую-то другую таблицу. Таким образом, мне нужно выбрать строку из внешней таблицы, имя которой основано на строке, хранящейся в foreign_table_name. Мой код не работал, потому что он имеет синтаксическую ошибку, но он ясно представляет, чего я хотел достичь:

SELECT foreign_table_id, foreign_table_name FROM `geo_table` gt
WHERE (
    SELECT COUNT(*) FROM gt.foreign_table_name AS t
    WHERE gt.foreign_table_id = t.uid
) > 0

Любая помощь будет высоко ценится

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Это должно быть сделано динамически:

declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec @sql 
3 голосов
/ 04 августа 2011

Если вы знаете все возможные имена таблиц, вы можете реализовать их, используя условный синтаксис:

SELECT foreign_table_id, foreign_table_name FROM `geo_table` gt
WHERE 
    CASE gt.foreign_table_name
        WHEN 'table1' THEN 
            EXISTS (
                SELECT * FROM table1
                WHERE id = gt.foreign_table_id
            )
        WHEN 'table2' THEN 
            EXISTS (
                SELECT * FROM table2
                WHERE id = gt.foreign_table_id
            )
        ELSE
            FALSE
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...