SQL查询 - PgSQL

时间:2011-04-13 07:33:20

标签: sql postgresql

有一个sql查询来构造。看起来很基本,我似乎无法绕过它。有两个表是这样的:

Table A : call_id  receive_id        Table B : entity_id   parent
          -------  ----------                  ---------   ------
            x         y                          x           a
            y         z                          y           b
            p         z                          z           b
                                                 p           c

call_id列和receive_id列中的元素都是类型实体。表B包含每个实体的父母 我需要一个查询来只选择表A中那些调用和接收的父项不相同的行。在示例表中,我想要除第二行之外的所有行,因为y和z具有共同的父b。

2 个答案:

答案 0 :(得分:0)

试试这个(已经在我的MySQL上验证过):


select a.* from
A a inner join B b1 on a.call_id=b1.entity_id
    inner join B b2 on a.receive_id=b2.entity_id
where b1.parent<>b2.parent

答案 1 :(得分:0)

SELECT *
FROM A
WHERE (SELECT B.parent FROM B WHERE B.entity_id = A.call_id) 
   != (SELECT B.parent FROM B WHERE B.entity_id = A.receive_id)
;