【发布时间】:2019-07-01 16:23:31
【问题描述】:
我正在尝试根据用户输入查询特定表,并希望查询包含该用户输入作为名称中的 search_id 的表。例如,表名的结构为run_000000_search_000000_lda_000000,我想获取与他们输入的具有相同search_id的表。
我知道在 Where 子句中使用“LIKE”时,您可以获得名称中包含特定字符串或 int 的列。但是,我没有发现将它与“FROM”子句一起使用。
search_id 50 的特定硬编码查询
SELECT *
FROM `run_000044_search_000050_lda_000366`;
总之,我怎样才能获得与用户输入的具有相同 search_id 的表。还尝试使用 run 和 lda 形成完整的表名也不起作用,因为两者之间没有明显的模式三个名字。
我也可以使用动态sql,但不知道怎么做。
【问题讨论】:
-
这需要动态 SQL。您需要使用正确的表名构造所需的查询字符串并将其传递到数据库中。
-
@GordonLinoff 是的,但我不知道完整的表名,它基于用户输入。我只知道搜索ID后面的数字。我不知道特定搜索 ID 的运行 ID 和 lda ID 是什么,除非我对所有 6000 个 ID 进行硬编码
-
@GordonLinoff 我有动态 SQL 但我不知道完整的字符串名称,所以它仍然可能吗?
-
这个问题似乎与糟糕的设计选择有关。因为使用元数据来分隔表名通常不是一个真正的好方法,因为您认为它会更快。最好是使用一个表,因为 MySQL 可以处理数以百万计的记录中的数以百万计的偶数,索引时就很好了..
-
@RaymondNijland 我没有创建表或数据库,它是通过运行测试和收集数据的计算机生成的,有没有办法在 from 语句中直接使用 like 子句?