我有一张桌子A:
column1 column2
name1 A
name1 B
在第1列中,名称1 在第2列中可以有2个值: A 或 B 。
我要这样选择:
select *
from tableA
where ??
条件是当column2等于A 或 A和B,但不等于B 时。这可能吗?
查询条件下的期望值:
column1 column2
name1 A
或
column1 column2
name1 A
name1 B
我不想要的东西:
column1 column2
name1 B
答案 0 :(得分:2)
您的规格是:
select t.*
from t
where t.column2 = 'A' or
exists (select 1 from t t2 where t2.column1 = t.column1 and t2.column2 = 'A');
实际上可以简化为:
select t.*
from t
where exists (select 1 from t t2 where t2.column1 = t.column1 and t2.column2 = 'A');
如果只需要具有此属性的名称,则:
select distinct t.column
from t
where t.column1 = 'A';
答案 1 :(得分:1)
您可以使用exists
select *
from tableA a
where exists ( select 1 from tableA where column1 = a.column1 and column2 = 'A' );
对于当前情况,即使不添加column1 = a.column1 and
部分,您也可以获得预期的结果。