小编典典

选择使用动态生成的表名

sql

我有以下问题。我的表格(geo_table)结构如下:

foreign_table_id | foreign_table_name | some_other_fields...

foreign_table_name存储不同表的名称,并foreign_table_id在这些表中存储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

阅读 231

收藏
2021-04-07

共1个答案

小编典典

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

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
2021-04-07