多个字段上的sql多个外连接

时间:2013-10-18 00:08:22

标签: sql outer-join

SQL初学者在这里。 我试图将一个表(pgm_update)外连接到另外两个表(family和family_act_visits)。 pgm_update记录可以对应于家庭记录或family_act_visits记录,或者两者都不对应;我的结果应该返回所有三种情况的数据。两个糟糕的架构,连接必须在多个列上。这些单独的查询中的每一个都有效,但我无法将它们组合成单个查询。

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.folks_fk'” 希望这篇长篇文章包含所有需要的信息....谢谢!

1 个答案:

答案 0 :(得分:0)

首先,{{1}多个条件并不表示设计不佳。

您确定要RIGHT JOIN?

吗?

也许您正在寻找LEFT JOIN

您的查询有点复杂,它包含CROSS JOIN,可能是无意的?

也许您只想UNION ALL允许您附加具有相同形状的数据集....

JOIN