我有这样的表
TABLE A
id | name
1 | a
2 | b
3 | c
TABLE B
id | ida | prp | prpval
1 | 1 | visible | true
2 | 1 | active | true
3 | 2 | visible | false
4 | 2 | active | true
5 | 3 | visible | true
6 | 3 | active | true
表A和表B通过id-ida连接。 我想显示表A中所有名称(名称),其中表B中的属性可见(prp)设置为' true' (prpval)。没有任何重复。所以在这个例子中我想要显示' a'和' b'。怎么做?
答案 0 :(得分:0)
因为你不想要重复,我会使用exists
子句来解决这个问题:
select *
from tableA a
where exists (select 1
from tableB b
where b.ida = a.id and b.prp = 'visitor' and b.prpval = 'true'
);
为了提高效果,请在tableB(ida, prp, prpval)
上创建索引。
答案 1 :(得分:0)
select a.name
from a
join b on a.id = b.aid
group by a.name
having sum(case when prp = 'visible' and prpvalue = 'true' then 1 else 0 end) > 0
答案 2 :(得分:0)
一个简单的答案是:
SELECT A.name
FROM A
INNER JOIN B
ON A.id = B.ida
WHERE B.prp = 'visible'
AND B.prpval = 'true'
答案 3 :(得分:0)
SELECT DISTINCT a.name
FROM A a join B b on a.id = b.ida
WHERE b.prp = 'visible' and b.prpval = 'true'
答案 4 :(得分:0)
select a.name
from A as a
join B as b on a.id=b.ida
and b.prpval='True' and b.prp='visible'