我知道有很多这些问题,但我无法在其他地方找到明确的答案 .
我有4张 table :
-
person_per
-
person2group2role_p2g2r
-
group_grp
-
list_lst
我想运行一个查询,显示有关一个人的所有信息,包括他们所在的组类型
per_ID
位于 person_per
表中
多对多桥具有 per_ID
, grp_ID
和 role_ID
grp_ID
位于 group_grp
表中
group_grp
表中的 grp_type
与 lst_optionID
链接
lst_OptionName
是文本中的名称(我最终想要显示的内容)
我尝试过两种方式,在两者中都遇到同样的错误 . 选项1使用 WHERE
args链接表,而选项2使用 JOIN
语句 . 这都在第二个子查询中 . 主要问题是提取个人信息,第一个子查询是拉动人的分类 .
选项1:
SELECT person_per.per_ID as AddToCart, CONCAT(person_per.per_FirstName, ' ', person_per.per_MiddleName) AS 'FirstNames', person_per.per_LastName AS 'Surname',
(SELECT lst_OptionName FROM list_lst WHERE list_lst.lst_ID=1 AND
list_lst.lst_OptionID=person_per.per_cls_ID) AS "Classification",
person_per.per_HomePhone AS 'Tel', person_per.per_WorkPhone AS 'Cell',
person_per.per_Email AS 'Email',
--START DIFF
(SELECT lst_OptionName
FROM list_lst, person2group2role_p2g2r, group_grp, person_per
WHERE list_lst.lst_ID=3
AND person_per.per_ID = person2group2role_p2g2r.p2g2r_per_ID
AND person2group2role_p2g2r.p2g2r_grp_ID = group_grp.grp_ID
AND group_grp.grp_Type = list_lst.lst_ID) AS "LifeGroupType"
--END DIFF
FROM person_per
ORDER BY person_per.per_LastName
选项2:
SELECT person_per.per_ID as AddToCart, CONCAT(person_per.per_FirstName, ' ', person_per.per_MiddleName) AS 'FirstNames', person_per.per_LastName AS 'Surname',
(SELECT lst_OptionName FROM list_lst WHERE list_lst.lst_ID=1 AND
list_lst.lst_OptionID=person_per.per_cls_ID) AS "Classification",
person_per.per_HomePhone AS 'Tel', person_per.per_WorkPhone AS 'Cell',
person_per.per_Email AS 'Email',
--START DIFF
(SELECT lst_OptionName
FROM list_lst
JOIN group_grp ON group_grp.grp_Type = list_lst.lst_ID
JOIN person2group2role_p2g2r ON person2group2role_p2g2r.p2g2r_grp_ID = group_grp.grp_ID
JOIN person_per ON person_per.per_ID = person2group2role_p2g2r.p2g2r_per_ID
WHERE list_lst.lst_ID=3) AS "LifeGroupType"
--END DIFF
FROM person_per
ORDER BY person_per.per_LastName
我知道这是一个问题,因为每个人都可以分配到多个组,我只是想知道如何将不同的组分开 . 优先结果将是每人一行,包括他们所有的信息和他们所在的团体 . 否则我将如何
-
将多个子查询结果CONCAT到单个字段中
-
为该人的不同群体设置不同的行
任何信息都会很棒:)
2 回答
我将假设问题是子查询返回多行,因为每个表中有多个项目 . 然后,我将假设您正在使用MySQL . 该解决方案是一个名为
group_concat()
的函数:在此过程中,我还添加了表别名以使查询更具可读性,显式
join
语法,并删除了子查询中对person_per
的额外不必要的引用 . 这可能是您首先遇到问题的原因 .您在子查询中选择了多个值,而应该只是一个 .
尝试使用
LIMIT 1
里面的子查询将解决它 . 或者你必须选择你需要的值,但它必须是一个值 .