0

这是我的表:

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 条目以及与 B 条目相关联的所有 C 条目,该条目与具有 item = "x" 和grade = "y" 的 A 条目相关联"

例如

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 进行元组。

4

1 回答 1

0

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

您确定需要如何连接列:“与 A 条目相关联的 B 条目”,并且查看列听起来像是您想要加入的b.aid = a.id。同样对于bc

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 子句中,并在它们前面加上表名,在这种情况下是可选的):

WHERE
    a.item = 'x'
    AND a.grade = 'y'

最后,您可以在 SELECT 子句中选择您真正需要的列。我猜SELECT b_c.cid会做。虽然如果您还有一个c表,您可能也想加入该表,并从中选择列。

于 2012-09-14T01:40:02.117 回答