我有这样的表:
**********************************
* row * field * item * content *
**********************************
* 1 * 231 * 10 * A *
* 2 * 232 * 10 * C *
* 3 * 231 * 11 * A *
* 4 * 232 * 11 * B *
**********************************
我想SELECT DISTINCT只有两个都有的项目:field = 231& content = A AND field = 232& content = B(存在具有这些值的那些行的项目)。因此,在这种情况下,结果应为11。
如果我把WHERE子句这样:
where (field=231 and content=A) OR (field=232 and content=B)
结果将是10和11,因为第一行符合第一个括号内的条件。如果我把'AND'代替'OR'而不是什么都没有回来因为WHERE子句只在一行测试,并且没有符合这种条件的行。
如何构造仅返回项目11的WHERE子句?
答案 0 :(得分:1)
item
分组,只接受那些有条件的人
select item
from your_table
group by item
having sum(case when field=231 and content='A' then 1 else 0 end) > 0
and sum(case when field=232 and content='B' then 1 else 0 end) > 0
答案 1 :(得分:1)
我认为解决此类问题的最常用方法是使用group by
和having
:
select item
from table t
group by item
having sum(case when field=231 and content=A then 1 else 0 end) > 0 and
sum(case when field=232 and content=B then 1 else 0 end) > 0;
having
子句中的每个条件都会检查一个条件是否为真。 > 0
表示至少有一行匹配。
答案 2 :(得分:1)
如果您需要匹配两个不同行中的条件,则需要将表连接到自身
select t1.item
from table t1
join table t2 ON t1.item=t2.item
where t1.content='A' AND t1.field=231
and t2.content='B' and t2.field=232