【问题标题】:How to use "LIKE" function on "FROM" clause in MySQL如何在 MySQL 中的“FROM”子句上使用“LIKE”函数
【发布时间】: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 子句?

标签: mysql sql django


【解决方案1】:

在网上搜索后,我终于找到了解决方案。 infomation_schema.tables 包含一个表名的列。从这里您可以查询表的全名并在另一个查询中使用它。我认为一个完整的例子更容易理解:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%_search_000050_lda_%';

SELECT * FROM INFROMATION_SCHEMA.TABLES

^ 选择表将包含所有表名和

WHERE TABLE_NAME LIKE '%_search_000050_lda_%';

^ 在所有表格中搜索引号中的内容。将“%_seach_000050_lda_%”替换为表所需的 Like 语句

【讨论】:

  • 在使用用户输入构建此类查询时要非常小心。如果您的堆栈安全性的任何部分不严密,那么有很多很多方法可能会出错。
  • @FlipperPA 是的,这个查询容易受到 SQL 注入的攻击,但就我而言,我不必担心,因为这是一个只有少数用户使用的私有网站
【解决方案2】:

LIKE 通常用在 FROM 之后的 WHERE 子句中,例如

SELECT * FROM table_name WHERE field LIKE 'value';

您还可以通过返回特定记录的“=”运算符比较数字或整数字段。

SELECT * FROM table_name WHERE id = 30;

如果您想从另一个表的特定记录集中提取详细信息,您可以使用子查询方法,例如参考 link

您也可以使用动态 sql 查询。请参阅 link 进行动态 sql 查询

【讨论】:

  • 我想从包含我的搜索 ID 的表中查询具有特定 ID 号的列。所以基本上,除非我使用子查询,否则无法在表名上使用 Like。我目前正在使用动态 sql 查询,那么有没有办法使用动态查询呢?
  • 您可以在link 中定义字段执行查询,您会看到动态 sql 查询的示例
  • 我还是 SQL 新手,并不真正了解如何在我的情况下执行此操作。你能给我举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 2018-08-23
  • 2011-04-09
  • 2018-12-24
  • 1970-01-01
  • 2021-10-31
  • 2015-02-23
相关资源
最近更新 更多