我在许多很多情况下难以查询可能的关系。感谢任何帮助!
我展示我的模式:
我做知道如何使用此架构进行查询的是:
我正在[[尝试要做的是:
这种查询有名称吗?我对加入的关系比对加入的[[what
更感兴趣(只是说让我想将整个系统放入Graph DB:/)?我想学习适当的术语,以帮助Google在以后解决问题。感谢您提供任何/所有帮助!让我知道是否需要提供其他信息!
band_members.id
,因为这两个外键还组成了一个复合主键(并且主键实际上可以用这种方式定义,因为通常用户不能两次成为同一波段的成员。唯一的例外是,如果一个用户在同一波段中可能有多个角色)。表面上,这听起来很容易-我们可以看到表之间的关系,通常情况下,它们之间只是使用INNER JOIN
。有三个表,因此将是两个联接。
但是,我们必须首先正确地概念化问题。我们遇到的问题是用户和乐队成员之间的联接(用户ID)实际上用于两件事:
谁在哪个乐队中
按用户筛选
SELECT
Users.first_name, Users.last_name
FROM Users
INNER JOIN Band_Members Band_Members1 ON (Band_Members1.user_id = Users.Id)
INNER JOIN Band_Members Band_Members2 ON (Band_Members1.band_id = Band_Members2.band_id)
WHERE
Band_Members2.user_id = 1
Band_Members
两次,而这样做的时候,必须给它们起不同的别名,以便可以分别引用它们。第一个实例在Users表和Bridge表之间进行了明显的联接,第二个实例在“乐队中的用户”和“我所在的乐队”之间进行了链接。当然,此解决方案要求您知道您的用户ID。如果您想进行类似的查询但要根据您的姓名进行过滤,则您必须加入User表的另一个(重新别名的)副本,以便您可以区分两个不同的目的:乐队”和“您的用户”。