【问题标题】:Refining MySQL select query using UNION and DISTINCT使用 UNION 和 DISTINCT 优化 MySQL 选择查询
【发布时间】:2017-12-06 21:32:32
【问题描述】:

我的 php 脚本中有一个查询没有返回所需的数据。查询是

select distinct require_category from users_require

返回:

Diet
Experience
MeasurementsGain
MeasurementsLoss
MeasurementsMaintain
WeightGain
WeightLoss
WeightMaintain
Workout

但我只想要

Diet
Experience
MeasurementsGain
WeightGain
Workout

我已经改进了我的 mysql 查询并返回了正确的结果,但我认为它的效率不够:

select distinct require_category from users_require where require_category NOT LIKE '%Weight%' and require_category NOT LIKE '%Measurements%' union select distinct require_category from users_require where require_category = 'WeightGain' or require_category = 'MeasurementsGain'

【问题讨论】:

  • 问题是:您希望根据什么规则在结果中包含或排除类别?看起来您可能想要排除包含单词 'Loss''Maintain' 的类别。另一个可能的规则是require_category in ('Diet', 'Experience', 'MeasurementsGain', 'WeightGain', 'Workout')。但只有您可以定义您实际想要应用的规则。
  • @ThorstenKettner 在我的脚本中我将传递两个变量来定义要包含的内容,即 $weight = 'WeightGain' 和 $measurements = 'MeasurementsGain'
  • 那么为什么你的结果包含'Diet'呢?它与两个字符串都不匹配。请仔细考虑规则。最简单的方法可能是查看每个单独的类别,并说明为什么它在结果集中或不在结果集中。

标签: mysql database select distinct union


【解决方案1】:

你可以使用一些联合

  select min(require_category)
  from users_require
  where require_category like 'Measurements%';
  union 
  select min(require_category)
  from users_require
  where require_category like 'Weigh%';
  union 
  select require_category
  from users_require
  where require_category not like 'Measurements%' 
  and require_category not like 'Weigh%';

【讨论】:

    【解决方案2】:

    请尝试关注,

    SELECT DISTINCT
    require_category FROM users_require WHERE require_category NOT LIKE '%Loss%'
    AND require_category NOT LIKE '%Maintain%'
    

    【讨论】:

      猜你喜欢
      • 2013-07-06
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2016-06-14
      相关资源
      最近更新 更多