我遇到了以下问题。我的表(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
非常感谢任何帮助
答案 0 :(得分:4)
这应该动态完成:
declare @tablename varchar(50)
set @tablename = 'test'
declare @sql varchar(500)
set @sql = 'select * from ' + @tablename
exec @sql
答案 1 :(得分:3)
如果你知道所有可能的表名,那么你可以使用条件语法来实现它:
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