1

ここではSQL初心者です。1 つのテーブル (pgm_update) を他の 2 つのテーブル (family および family_act_visits) に外部結合しようとしています。pgm_update レコードは、family レコードまたは family_act_visits レコードに対応する場合もあれば、どちらにも対応しない場合もあります。私の結果は、3 つのケースすべてのデータを返すはずです。いくつかの悪いアーキテクチャの両方で、結合は複数の列にある必要があります。これらの個々のクエリはそれぞれ機能しますが、それらを 1 つのクエリに結合することはできませんでした。

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()

完全なクエリでの私の試みの1つは次のとおりです。

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'」というエラー メッセージが表示されます。

4

1 に答える 1

0

まず、JOIN複数の条件で ing を行うことは、設計が不十分であることを示しているわけではありません。

RIGHT JOINを使用してもよろしいですか?

おそらくあなたはLEFT JOINを探しています

あなたのクエリは少し複雑で、おそらく意図せずにCROSS JOINが含まれていますか?

おそらく、同じ形状のデータセットを追加できるUNION ALLが必要なだけかもしれません....

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()
于 2013-10-18T00:32:30.850 に答える