我有以下问题。我的表格(geo_table)结构如下:
geo_table
foreign_table_id | foreign_table_name | some_other_fields...
foreign_table_name存储不同表的名称,并foreign_table_id在这些表中存储ID。我想做的是检查上述表中的行是否存储了对其他表的有效引用。因此,我需要从外部表中选择一行,其名称基于存储在中的字符串foreign_table_name。我的代码不起作用,因为它存在语法错误,但清楚地显示了我想要实现的目标:
foreign_table_name
foreign_table_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
如果知道所有可能的表名,则可以使用条件语法来实现它:
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