Join 在psql中连接三个表并根据组成员关系保留结果

Join 在psql中连接三个表并根据组成员关系保留结果,join,psql,Join,Psql,我正在使用psql,并从表A连接了三个表A、B和C 例如,结果表如下所示: +----+------+------+------+ | pk | a_id | b_id | c_id | +----+------+------+------+ | 1 | 5 | 12 | 16 | | 2 | 5 | 7 | 8 | | 3 | 5 | 6 | 21 | | 4 | 8 | 12 | 16 | | 5 | 8 |

我正在使用psql,并从表A连接了三个表A、B和C

例如,结果表如下所示:

+----+------+------+------+
| pk | a_id | b_id | c_id |
+----+------+------+------+
|  1 |    5 |   12 |   16 |
|  2 |    5 |    7 |    8 |
|  3 |    5 |    6 |   21 |
|  4 |    8 |   12 |   16 |
|  5 |    8 |    3 |    9 |
|  6 |    9 |   11 |   32 |
|  7 |    9 |    8 |    2 |
+----+------+------+------+
+----+------+------+------+
| pk | a_id | b_id | c_id |
+----+------+------+------+
|  1 |    5 |   12 |   16 |
|  2 |    5 |    7 |    8 |
|  3 |    5 |    6 |   21 |
|  4 |    8 |   12 |   16 |
|  5 |    8 |    3 |    9 |
+----+------+------+------+
我试图在一个id上创建c_id关系。在一个id中有三个组[5,8,9]。例如,c_id=16与a_id=[5,8]有关系,因此c_id=[8,21,9,32]必须通过a_id=[5,8]进行保护。结果表应如下所示:

+----+------+------+------+
| pk | a_id | b_id | c_id |
+----+------+------+------+
|  1 |    5 |   12 |   16 |
|  2 |    5 |    7 |    8 |
|  3 |    5 |    6 |   21 |
|  4 |    8 |   12 |   16 |
|  5 |    8 |    3 |    9 |
|  6 |    9 |   11 |   32 |
|  7 |    9 |    8 |    2 |
+----+------+------+------+
+----+------+------+------+
| pk | a_id | b_id | c_id |
+----+------+------+------+
|  1 |    5 |   12 |   16 |
|  2 |    5 |    7 |    8 |
|  3 |    5 |    6 |   21 |
|  4 |    8 |   12 |   16 |
|  5 |    8 |    3 |    9 |
+----+------+------+------+

如何在join语句中写入这样的条件?

在join之后,您可以编写此查询。我直接创建了结果表,然后编写了一个SQL查询

SELECT * from res
WHERE a_id in (SELECT distinct a_id
               FROM res
               WHERE c_id=16)