2017-01-11 179 views
0

我有一些麻烦,下面的问题,会告诉你我有什么,我想要什么,我都试过...选择子查询子表

我想要什么:我有一个家长和孩子表中,母公司是

访问

和子表是

评估

,有一个在两者之间定义一对多的关系,请参见下面的表结构:

SELECT 
VisitPk, (Primary Key) 
ClientFk, 
ClientSiteFk, 
AssessorFk, 
VisitStartDate, 
VisitEndDate, 
CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
Duration, 
VisitStatus, 
TargetDate, 
`Long`, 
Lat, 
VisitPlanRequired, 
VisitPlanIssued, 
VisitPlanStatus, 
VisitPlanAttachment, 
DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
Overnight, 
YEAR(TargetDate) AS `Year` 
FROM visits 
ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate 

SELECT 
assessments.AssessmentPk, (Foreign Key) 
assessments.VisitFk, 
assessments.`Scope`, 
FROM assessments 

我需要的是把一个领域到评估表,以便从查看表中查找所有范围,然后对它们进行分组。 E.G访问pk 1有两个条目3个子记录,1,2和3,id喜欢使用concat/implode函数在父表中显示为1,2,3。

我可以用PHP做到这一点,并将数据物理存储在表中,但我宁愿不走这条路。

我已经尝试在第一个选择语句运行子查询,但没有甚至接近第二选择语句。

我一直在使用这个〔实施例中发现也试过:Can I concatenate multiple MySQL rows into one field?,如:

SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') 
FROM peoples_hobbies GROUP BY person_id 

最后,我需要的是有人告诉我怎样可以使用上述group_contact例如放置第二个SELECT语句,但通过查找where assessmentfk = assessmentpk的子表。

因此,像:

SELECT 
VisitPk, (Primary Key) 
ClientFk, 
ClientSiteFk, 
**CONCAT(SELECT `scope` from assessments LEFT OUTER JOIN assessments ON visits.VisitPk = assessments.VisitFk) as `Scope`** 
AssessorFk, 
VisitStartDate, 
VisitEndDate, 
CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
Duration, 
VisitStatus, 
TargetDate, 
`Long`, 
Lat, 
VisitPlanRequired, 
VisitPlanIssued, 
VisitPlanStatus, 
VisitPlanAttachment, 
DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
Overnight, 
YEAR(TargetDate) AS `Year` 
FROM visits 
ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate 

我希望这是有道理的,并且有人可以帮助,这是远远超出了我在过去提前做了道歉。

+0

我也已经尝试(SELECT GROUP_CONCAT('scope' SEPARATOR '')从评估LEFT OUTER JOIN评估ON visits.VisitPk = assessments.VisitFk GROUP连接两个表和组)作为Scope, – jaykay79

+0

和group_concat('Scope')作为来自评估的标准,其中visits.VisitPk = assess.VisitFk, – jaykay79

回答

0

尝试通过内

 SELECT 
      VisitPk, ClientFk, ClientSiteFk,AssessorFk,VisitStartDate, VisitEndDate, 
      GROUP_CONCAT(a.scope, ',') as scopes 
      CONCAT(MONTHNAME(TargetDate), ' ', YEAR(TargetDate)) AS TargetMonth, 
      Duration,VisitStatus,TargetDate,`Long`,Lat,VisitPlanRequired, 
      VisitPlanIssued,VisitPlanStatus,VisitPlanAttachment, 
      DATE_SUB(VisitStartDate, INTERVAL 1 Month) AS VisitPlanDue, 
      Overnight,YEAR(TargetDate) AS `Year` 
    FROM visits v 
    INNER JOIN assessments a 
    ON v.VisitPk = a. VisitFk 
    GROUP BY v.VisitPk 
    ORDER BY YEAR(TargetDate) DESC, TargetDate, VisitStartDate