加入两个有条件的表

时间:2014-05-21 13:58:40

标签: sql sql-server

我有这样的表

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'。怎么做?

5 个答案:

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