在mysql中的一种简单查询但无法解决它

时间:2017-01-23 16:18:41

标签: mysql

我之前在此发布了一个问题:Mysql query with joined tables problems 但是没有得到好的答案,所以我认为我把它分解为只显示让我头疼的部分,我可能会更快地得到这个问题的答案,如果我能解决这个问题,我可以解决以前的问题太

这些值指的是item_id,我希望获得该项目所指的item_id((' good' OR&#39} ;糟糕')和'快速')

所以必须列出item_id 1,因为它很好也很快 不应列出item_id 2,因为它不快。

我想得到的结果

item_id
  1
  5

如果我有这样的表

id    item_id    value
1      1        'good'
2      1        'fast'

3      2        'good'
4      2        'slow'

5      3        'good'
6      3        'slow'

7      4        'bad'
8      4        'slow'

9      5        'bad'
10     5        'fast'

11     6        'moderate'
12     6        'fast'

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用EXISTS查询。

以下是一个例子:

select t1.item_id 
from your_table t1
where t1.value = 'fast' 
and exists (
  select NULL 
  from your_table t2 
  where t2.item_id = t1.item_id 
  and t2.value in ('good','bad')
);

答案 1 :(得分:1)

一种看待这种情况的方法是:您希望每个项目都有一个语句,因此您可以按项目进行聚合和分组。标准出现在HAVING条款中。

select item_id
from mytable
group by item_id
having count(case when value = 'fast' then 1 end) >= 1
   and count(case when value in ('good','bad') then 1 end) >= 1;

(您也可以使用sum(case when value = 'fast' then 1 else 0 end) >= 1max(case when value = 'fast' then 1 else 0 end) = 1或这些行中的某些表达式。COUNT(expression)计算非空的表达式。因为我省略了ELSE分支,一个不匹配的记录结果为空,因此不计算。有些人更喜欢SUM,有些人更喜欢COUNT - 它最终是个人偏好的问题。)

答案 2 :(得分:1)

考虑到项目可能好坏,而不是两者兼而有之,我会用简单的方法:

select item_id your_table 
where value in ('good','bad','fast')
group by item_id
having count(*) = 2 
在这些情况下,

计数应始终为2。