主表有4列:
用户活动表
userActivityId userId therapistId activityId
1 1 1 1
每列都是一个表,这些值都是外键。
基本上,我试图运行一个查询,该查询将连接到用户表并根据用户ID拉出他们的名字和姓氏。与治疗师相同的事情-联接到治疗师表,拉名字和姓氏,最后加入到“活动”表,然后从活动ID中提取活动名称和路径
其他表格如下:
User Table
userId fName lName
Therapist Table
therapistId therapistFirstName therapistLastName
Activity Table
activityId activityTitle activityPath
到目前为止,我的查询看起来像
SELECT
User_Activities.userId,
User_Activities.therapistId,
User_Activities.activityId,
Activities.activityTitle,
Activities.activityPath,
Users.fName,
users.lName,
Therapists.therapistFirstName,
Therapists.therapistLastName
FROM
User_Activities
INNER JOIN Users
ON User_Activities.userId = Users.userId
INNER JOIN Therapists ON
User_Activities.therapistId = Therapists.therapistId
INNER JOIN Activities ON
Activities.activityId = User_Activities.userActivityId
WHERE
User_Activities.userId = 1;
当我运行此查询时,结果仅返回1行。但是,User_Activites表中有两个分配给userId 1的活动。
如果我更改:INNER JOIN活动开启 Activities.activityId = User_Activities.userActivityId
从INNER JOIN到LEFT JOIN,它将显示第二行,但是activityTitle和activityPath将在第二行显示为NULL。
userActivityId userId therapistId activityId activityId activityTitle activityPath fName lName therapistFirstName therapistLastName
1 1 1 1 1 Brain GZZ0zpUQ S C M D
11 1 1 1 NULL NULL NULL S C M D
答案 0 :(得分:0)
您已经回答了几乎所有的问题。第二个活动没有有效的ActivityId
。
如果您要为用户进行所有个活动,则应将查询的短语设置为:
SELECT . . .
FROM Users u LEFT JOIN
User_Activities ua
ON ua.userId = u.userId LEFT JOIN
Therapists t
ON ua.therapistId = t.therapistId LEFT JOIN
Activities a
ON a.activityId = ua.userActivityId
WHERE u.userId = 1;
您要从要保留所有行的表开始。然后使用LEFT JOIN
引入其他表。
注释的其他两个更改:
SELECT
需要更改为使用别名。WHERE
子句引用Users
表而不是UserActivities
。