Mysql 选择使用动态生成的表名

Mysql 选择使用动态生成的表名,mysql,sql,Mysql,Sql,我有以下问题。我的表格geo_表格结构如下: foreign_table_id | foreign_table_name | some_other_fields... 外来表名称存储不同表的名称,外来表id存储这些表中的id。我要做的是检查上述表中的一行是否存储了对其他表的有效引用。因此,我需要从外部表中选择一行,该行的名称基于存储在外部表中的字符串。我的代码不起作用,因为它有语法错误,但它清楚地显示了我想要实现的目标: SELECT foreign_table_id, foreign_tab

我有以下问题。我的表格geo_表格结构如下:

foreign_table_id | foreign_table_name | some_other_fields...
外来表名称存储不同表的名称,外来表id存储这些表中的id。我要做的是检查上述表中的一行是否存储了对其他表的有效引用。因此,我需要从外部表中选择一行,该行的名称基于存储在外部表中的字符串。我的代码不起作用,因为它有语法错误,但它清楚地显示了我想要实现的目标:

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

这应该动态完成:

declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec @sql 

这应该动态完成:

declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec @sql 

如果您知道所有可能的表名,则可以使用条件语法实现它:

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

如果您知道所有可能的表名,则可以使用条件语法实现它:

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

非常感谢你。但有一件事我需要问一下。如何放置此代码?在内部查询开始时?这应该动态完成!完成整个查询的唯一方法是通过存储过程非常感谢。但有一件事我需要问一下。如何放置此代码?在内部查询开始时?这应该动态完成!完成整个查询的唯一方法是通过存储过程