【问题标题】:Select all fields value where all fileds value like some String选择所有字段值,其中所有字段值都像某个字符串
【发布时间】:2016-06-12 08:56:17
【问题描述】:

有人可以帮忙吗,我需要从所有字段值(如 %someString%)的字段中获取所有值。我的表有 17 个字段,我不想在查询中写入所有字段。数据库 Mysql。

select * from Deputes_APPEAL where filePath, checkForPlagiarism, contentOfResolution, countOfPages, dateForCheck, incomeNumber, incomingDate, mainWorker, nameAndAddressOfApplicant, nameOfDepute, outDate, outNumber, result, secondaryWorkers, shortContentOfAppeal, statusOfWorking, themeOfAppeal, TypeOfDeputeAppeal, unitWhoDoResolution like %someString%

【问题讨论】:

  • 在查询中编写 17 个字段比发布此问题花费的时间更少。
  • 也许,但这不正确?
  • 发布您的表结构,并在LIKE clause 中提及您要省略哪些字段。
  • select * from Deputes_APPEAL where filePath like '%someString%' or checkForPlagiarism like '%someString%' or ...: 这将找到至少一个字段类似于 %someString% 的所有行。如果它们都应该像 %someString%,那么使用 and 而不是 or。
  • 我可以写 select * from Deputes_APPEAL where concat (all fields) like %someString%, sql 有通用子句吗?我不想列出查询中的所有字段

标签: java mysql sql hibernate


【解决方案1】:

实现此目的的一种方法如下:

SELECT 
CONCAT('SELECT * FROM Deputes_APPEAL WHERE ',GROUP_CONCAT(COLUMN_NAME SEPARATOR ' LIKE \'%something%\' OR '),' LIKE \'%something%\'')
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME'
AND TABLE_NAME = 'YOUR_TABLE_NAME'
AND COLUMN_NAME NOT IN ('Column1','Column2',....);

注意:您需要将列名放在NOT IN 子句中,那些您想在LIKE 表达式中省略的内容。

输出:通过运行上述查询,您将获得如下输出:

SELECT * FROM Deputes_APPEAL WHERE column_name1 LIKE '%something%' OR .......

现在获取这个查询并运行。

【讨论】:

    【解决方案2】:

    只需使用循环构建 SQL - 超级简单。

    final String[] properties = new String[] { /* all your fields here */ };
    
    // build the SQL
    StringBuilder sb = new StringBuilder();
    sb.append( "SELECT o FROM YourEntity o " );
    if ( properties.length > 0 ) {
      sb.append( "WHERE ( " ).append( properties[0] ).append( "LIKE :v0" );
      for ( int i = 1; i < properties.length; ++i ) {
        sb.append( " OR " ).append( properties[i] ).append( "LIKE :v" ).append(i); 
      }
      sb.append( " ) " );
    }
    
    // build the query.
    Query query = session.createQuery( sb.toString() );
    for ( int i = 0; i < properties.length; ++i ) {
      query.setParameter( "v" + i, "%something%" );
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 2012-03-20
      • 2018-09-26
      • 2014-06-09
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多