私は自分が持っているクエリの問題を突き止めようとしています。クエリは実際にはHQLからの休止状態によって生成されますが、結果のSQLは私が期待することを実行しません。SQLを少し変更すると正しい結果が得られますが、変更によって違いが生じる理由がわかりません。
元のクエリ(行を返さない)
select sched.id, max(txn.dttm), acc.id
from PaymentSchedulePeriod sched
cross join PaymentSchedulePayment pay
right outer join AccountTransaction txn on pay.accountTransactionFk=txn.id
right outer join Account acc on txn.accountFk=acc.id
where sched.accountFk=acc.id
group by sched.id, acc.id
変更されたクエリ-クロス結合がコンマに置き換えられました(暗黙のクロス結合)
1行を返します
select sched.id, max(txn.dttm), acc.id
from PaymentSchedulePeriod sched
,PaymentSchedulePayment pay
right outer join AccountTransaction txn on pay.accountTransactionFk=txn.id
right outer join Account acc on txn.accountFk=acc.id
where sched.accountFk=acc.id
group by sched.id, acc.id
私の理解では、間違っているかもしれませんが、書くことは書くことfrom Table1 a, Table2 b
と同じfrom Table 1 a cross join Table2 b
です。そのため、クエリが異なる結果を返す理由がわかりません。
これを引き起こす最初のクエリでのクロス結合と外部結合の間の相互作用と関係がありますか?クエリプランを確認しましたが、2番目のクエリプランは妥当なようです。最初のものには外部結合がまったくありませんが、これは奇妙なことです。
これはSQLServer2008にあります。