【问题标题】:MySQL use of REGEXP or LIKE to select table name with database aliasMySQL 使用 REGEXP 或 LIKE 选择具有数据库别名的表名
【发布时间】:2015-11-13 13:04:09
【问题描述】:

我有一张如下表:

id    |                query                 -
------------------------------------------------
1     | SELECT COUNT(*) FROM `test`.`user`;
2     |  INSERT INTO `test`.`user` (id,name,email)
         VALUES      ('4','Don','don@quikr.com');
3     | SELECT COUNT(*) FROM `test`.`data`;

我想在查询中获取具有“test.user”模式的行。

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:
    SELECT * FROM ... WHERE LOWER(query) LIKE '%`test`.`user`%'
    

    这假设您在 . 周围没有任何空格

    【讨论】:

      【解决方案2】:

      您可以使用 LIKE。

      SELECT * FROM `tablename` WHERE `query` LIKE '%test%user%'
      

      % 是通配符。你可以把它放在前面、后面或中间,并且可以多次使用。上面的查询将按顺序查找具有“test”和“user”的任何内容,以及介于两者之间、之前或之后的任何字符。

      【讨论】:

      • 检查失败的用例:SELECT main.id, usr.name FROM test.main main INNER JOIN db.userusr;
      【解决方案3】:

      如果您使用REGEXP,您可以更好地控制查询中的模式匹配,例如

      select `query` from test WHERE `query` REGEXP '.*test.*user.*';
      

      为使用REGEXP 的查询提供基本结构,这适用于您提出的问题,但可以根据您的需要进行修改。

      如图所示demo sqlfiddle

      有关与 REGEXP 一起使用的可用元字符列表,请参阅 - http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/

      【讨论】:

      • 如果我们有“user_duplicate”或“usersomething”之类的表名,上述查询将失败。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2015-04-12
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多