【发布时间】:2017-05-27 15:41:39
【问题描述】:
我有 4 张桌子,USER(ID, USER_ID, NAME), USER_2(ID, USER_ID, EMAIL) 和 USER_CLASS_MAP(ID, USER_ID, CLASS_ID) 和 CLASS(ID, NAME)。 USER_CLASS_MAP 基本上是映射USER 和CLASS 之间的MANY-MANY 关系。
需要发送属于特定类的所有用户的所有详细信息。我有如下非工作代码 - 知道我可能做错了什么,或者有没有其他有效的方法来实现同样的目标?
我指的是 (SQL Inner-join with 3 tables?) 在多个表上进行 INNER JOIN,但这里的问题是,我不是针对给定 CLASS_ID 的单个用户,而是从 USER_CLASS_MAP 获得 USER_ID 的列表。
SELECT USER_ID from USER_CLASS_MAP where CLASS_ID=:classID
这是我目前拥有的:
SELECT USER1.NAME, USER2.EMAIL
INNER JOIN CLASS_USER_MAP as cmap
ON cmap.USER_ID = USER1.ID
INNER JOIN CLASS_USER_MAP as cmap
ON cmap.USER_ID = USER2.ID
这里的问题是 .ID 基本上是一个列表!
EXAMPLE:
USER:
(id1, user1, rob)
(id2, user2, bob)
USER_2:
(id1, user1, rob@something.something)
(id2, user2, bob@something.something)
USER_CLASS_MAP:
(id1, user1, class1)
(id2, user2, class1)
CLASS:
(class1, Biology)
(class2, Chemistry)
Given:
Get all User Details for class with classId = class1
Output:
[
{USER_ID=user1, NAME=rob, EMAIL=rob@something.something},
{USER_ID=user2, NAME=bob, EMAIL=bob@something.something}
]
【问题讨论】:
-
一个ID怎么可能是一个列表?
-
如果您为每个表和您的预期结果添加一些样本数据,这将得到显着改善。
-
添加一些示例表数据和预期结果。 (以及格式化文本。)
-
基本上我从运行第一个查询中得到一个 USER_ID 列表(因为它是多对多映射),所以第二个查询中的 ID 必须来自这个列表。
-
还是不清楚。请尝试为您的表构建一个包含一些示例数据的小示例,然后发布您需要从查询中获得的结果,甚至解释结果背后的逻辑。