以下是我的表格:
Table A which has entries with "item" and "grade" fields
Table B which has entries with A.id
Tuple table B-C
我希望所有A条目都有item =" x"和年级=" y" 并且与B条目相关联的所有C条目与具有item =" x"的A条目相关联。和年级=" y"
例如
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表中的所有条目和条目20,但不返回C表中的21,因为C.id = 21仅与B关联,而B与不符合项目的A相关联等级要求。
答案 0 :(得分:0)
这些关联虽然听起来很复杂,但只是三个表中的简单连接:a
加入b
加入c
。
您可以确定需要如何连接列:"与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子句前面加上表名,在这种情况下这是可选的):
WHERE
a.item = 'x'
AND a.grade = 'y'
最后,您可以在SELECT子句中选择您真正需要的列。我会盯着SELECT b_c.cid
做。虽然如果你也有一个c
表,你也可以加入该表,并从中选择列。