Postgresql Postgres sql查询难以连接

Postgresql Postgres sql查询难以连接,postgresql,tuples,Postgresql,Tuples,以下是我的表格: Table A which has entries with "item" and "grade" fields Table B which has entries with A.id Tuple table B-C 我想要所有包含item=“x”和grade=“y”的A条目 以及与具有item=“x”和grade=“y”的a条目关联的B条目关联的所有C条目 比如说 A table: A.item = "x", A.Grade = "y", A.id = 1

以下是我的表格:

Table A which has entries with "item" and "grade" fields
Table B which has entries with A.id
Tuple table B-C
我想要所有包含item=“x”和grade=“y”的A条目 以及与具有item=“x”和grade=“y”的a条目关联的B条目关联的所有C条目

比如说

A table:

    A.item = "x", A.Grade = "y", A.id = 1
    A.item = "x", A.Grade = "y", A.id = 2
    A.item = "x", A.Grade = "y", A.id = 3
    A.item = "r", A.Grade = "z", A.id = 4

B Table

   B.AID = 1, B.id = 10
   B.AID = 1, B.id = 11
   B.AID = 2, B.id = 13
   B.AID = 3, B.id = 14
   B.AID = 4, B.id = 15

B-C Tuple Table

   BID = 10, CID = 20
   BID = 11, CID = 20
   BID = 13, CID = 20
   BID = 15, CID = 21

查询应返回A表中的所有条目以及C表中的条目20而不是21,因为C.id=21仅与与不符合项目和等级要求的A关联的B进行元组化

这些关联虽然在书面形式上听起来很复杂,但只是三个表之间的简单连接:
a
连接到
b
连接到
c

SELECT ...
FROM
    a
    JOIN b ON b.aid = a.id
    JOIN b_c ON b_c.bid = b.id
WHERE
    ...
您可以确定列需要如何联接:“与a项关联的B项”,查看这些列听起来像是要在
B.aid=a.id
上联接。类似地,对于
b
c

SELECT ...
FROM
    a
    JOIN b ON b.aid = a.id
    JOIN b_c ON b_c.bid = b.id
WHERE
    ...
这将在将原始数据集拆分为三个标准化表之前构造原始数据集

下一步是根据给定的条件进行过滤。您只需要“item=“x”和grade=“y”所在的行,因此将这些行添加到以表名作为前缀的where子句中,这在本例中是可选的):


最后,您可以在SELECT子句中选择真正需要的列。我正在喷涌
选择b_c.cid
就可以了。不过,如果您还有一个
c
表,您可能也想加入该表,并从中选择列。

您尝试了什么?我们很乐意帮助解决问题,但这看起来有点像你希望我们做你的工作。我尝试了很多事情。我仍然对一些复杂的sql查询感到困惑。我建立了整个数据库,现在我需要一些关于复杂查询的帮助。非常感谢您的帮助请在问题中添加您最好的问题。这只会让您感到困惑。我在问题中抽象了它。我只需要在这些类型的查询中指出正确的方向。我不明白你为什么给我添麻烦。一些
CREATE TABLE
语句和一些
INSERT
s对于一些示例数据会有很大帮助。预期结果也是如此。是的。完全正确。我开始了解它是如何更好地工作的。谢谢你的帮助。