sql多字段上的多个外部联接

sql多字段上的多个外部联接,sql,outer-join,Sql,Outer Join,这里是SQL初学者。 我正在尝试将一个表(pgm_更新)外部联接到另外两个表(家庭和家庭访问)。pgm_更新记录可能对应于家庭记录或家庭行为访问记录,或者两者都不对应;我的结果应该会返回所有三种情况的数据。这两种架构都很糟糕,连接必须位于多个列上。每一个单独的查询都有效,但我无法将它们组合成一个查询 SELECT p.last_name_wo, p.activity, p.participation, fav.* FROM family_act_visits fav RIGHT JOIN p

这里是SQL初学者。 我正在尝试将一个表(pgm_更新)外部联接到另外两个表(家庭和家庭访问)。pgm_更新记录可能对应于家庭记录或家庭行为访问记录,或者两者都不对应;我的结果应该会返回所有三种情况的数据。这两种架构都很糟糕,连接必须位于多个列上。每一个单独的查询都有效,但我无法将它们组合成一个查询

SELECT p.last_name_wo, p.activity, p.participation, fav.* 
FROM family_act_visits fav 
RIGHT JOIN pgm_update p ON fav.folks_fk=p.folks_fk and fav.activity=p.activity 
    JOIN activities a on p.activity=a.activity 
WHERE p.participation in ('c','a') and a.act_start_date>current_date()

SELECT p.last_name_wo, p.activity, p.participation, f.* 
FROM family f 
RIGHT JOIN pgm_update p ON f.folks_fk=p.folks_fk and f.activity=p.activity 
JOIN activities a on p.activity=a.activity 
WHERE p.participation in ('c','a') and a.act_start_date>current_date()
我尝试的完整查询之一是:

SELECT p.last_name_wo, p.activity, p.participation, fav.* 
FROM family_act_visits fav, family f
RIGHT JOIN pgm_update p ON fav.folks_fk=p.folks_fk and fav.activity=p.activity
RIGHT JOIN pgm_update p2 ON f.folks_fk=p2.folks_fk and f.activity=p2.activity
JOIN activities a on p.activity=a.activity
WHERE p.participation in ('c','a') and a.act_start_date>current_date()
这将获取错误消息“on子句”中的未知列“fav.people_fk”
希望这篇长文章包含所有需要的信息…谢谢

首先,
JOIN
ing在多种情况下不表示设计不良

你确定你想要一份工作吗

也许你在找

您的查询有点复杂,可能是无意中包含了一个

也许您只是想知道,它允许您附加具有相同形状的数据集

SELECT 
    p.last_name_wo
    ,p.activity
    ,p.participation
    ,fav.* 
FROM 
    family_act_visits fav 
RIGHT JOIN pgm_update p 
    ON fav.folks_fk=p.folks_fk 
    AND fav.activity=p.activity 
JOIN activities a 
    ON p.activity=a.activity 
WHERE 
    p.participation IN ('c','a') 
    AND a.act_start_date>current_date()
UNION ALL
SELECT 
    p.last_name_wo
    ,p.activity
    ,p.participation
    ,f.* 
FROM 
    family f 
RIGHT JOIN pgm_update p 
    ON f.folks_fk=p.folks_fk 
    AND f.activity=p.activity 
JOIN activities a 
    ON p.activity=a.activity 
WHERE 
    p.participation IN ('c','a') 
    AND a.act_start_date>current_date()

您可以选择有用的答案并接受解决您问题的答案,谢谢。