1

こんにちは、次のサブクエリを変換して結合のみを使用しようとしていますが、変換に問題があり、結果が正しくフィルタリングされていません。問題または結合を使用した正しいクエリを理解するための助けが必要です。サブクエリを含むSqlは正常に機能しています。

SELECT ev1.eventgender,ev1.distance,ev1.style FROM events ev1 
JOIN results re1 ON ev1.eventid = re1.eventid 
JOIN competitors cm1 on re1.competitornum = cm1.competitornum
WHERE cm1.countrycode = 'AUS'
AND ev1.eventid NOT  In (SELECT ev2.eventid FROM events ev2
                         JOIN results re2 ON ev2.eventid = re2.eventid 
                         JOIN Competitors cm2 ON re2.competitornum = cm2.competitornum 
                         WHERE cm2.countrycode = 'AUS'
                         AND re2.place IN (1,2,3))

次のクエリを試しましたが、結果が正しくありません

SELECT ev1.eventgender,ev1.distance,ev1.style FROM events ev1 
LEFT OUTER JOIN results re1 
     ON ev1.eventid = re1.eventid 
     AND re1.place Not in (1,2,3)
JOIN Competitors cm1 ON re1.competitornum = cm1.competitornum
AND cm1.countrycode = 'AUS'
WHERE ev1.eventid IS NOT NULL
ORDER by ev1.eventgender, ev1.style

実結果

ここに画像の説明を入力

期待される結果

ここに画像の説明を入力

4

1 に答える 1

0

サブクエリは相関していないため、from句に直接移動できます。それを使用して結合し、一致しない句をleft outer joinチェックインします。where

SELECT ev1.eventgender, ev1.distance, ev1.style
FROM events ev1 JOIN
     results re1
     ON ev1.eventid = re1.eventid JOIN
     competitors cm1
     on re1.competitornum = cm1.competitornum left outer join
     (SELECT ev2.eventid
      FROM events ev2 JOIN
           results re2
           ON ev2.eventid = re2.eventid JOIN
           Competitors cm2
           ON re2.competitornum = cm2.competitornum 
      WHERE cm2.countrycode = 'AUS' AND re2.place IN (1,2,3)
     )
     on ev1.eventid = ev2.eventid
WHERE cm1.countrycode = 'AUS' and ev2.eventid is null
于 2013-04-29T15:34:54.970 に答える