代码之家  ›  专栏  ›  技术社区  ›  Cheng

如何消除SQL中的重复计算?

  •  4
  • Cheng  · 技术社区  · 15 年前

    我有一个SQL可以简化为:

    SELECT * 
      FROM table 
     WHERE LOCATE( column, :keyword ) > 0 
    ORDER BY LOCATE( column, :keyword )
    

    您可以看到“locate(column,:keyword)”的副本。有没有办法只计算一次?

    3 回复  |  直到 15 年前
        1
  •  2
  •   six8    15 年前

    在MySQL中使用别名:

    SELECT *, LOCATE( column, :keyword ) AS somelabel 
    FROM table 
    HAVING somelabel > 0 
    ORDER BY somelabel
    
        2
  •  5
  •   Jeff Ober    15 年前
    SELECT *, LOCATE( column, :keyword ) AS somelabel 
    FROM table 
    WHERE somelabel > 0 
    ORDER BY somelabel
    
        3
  •  2
  •   JosephStyons    15 年前

    Jeff Ober有正确的想法,但这里有一个替代方法:

    SELECT
      t.*
     ,loc.LOCATED
    FROM
      table t
      INNER JOIN
      (
      SELECT
        primary_key
       ,LOCATE(column,:keyword) AS LOCATED
      FROM
        table 
      ) loc
      ON t.primary_key = loc.primary_key
    WHERE loc.LOCATED > 0
    ORDER BY
      loc.LOCATED