SQL查询 - 如何构造multirow依赖where子句

时间:2014-07-09 15:43:51

标签: sql where

我有这样的表:

**********************************
* 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子句?

3 个答案:

答案 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 byhaving

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