我之前在此发布了一个问题: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'
有人可以帮助我吗?
答案 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) >= 1
或max(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。