私は条件付きクロスジョインがWHERE句で指定された条件を持つ必要があり、なぜ 'ON'句で動作しないのか疑問に思っています。 コンパイル例えば、リンクを参照してください:http://rextester.com/IKY8693CROSS JOIN条件はWHERE句のみの 'ON'句で機能しないのはなぜですか?
ビジネスコンテキスト:私は3番目のテーブルに対して参加を左にするために、ギャップを埋めるために、開始日と終了日の間の日付のリストを生成する必要があり、そのようなゼロ/こと特定の月にnullが返されます。
私はこれをどのようにしましたか:YYYYMMの開始日と終了日を含むユーザーの表を例にとりましょう。
| user_id | start_yearmonth | end_yearmonth |
|---------|-----------------|---------------|
| u9876 | 201504 | 201610 |
| u5564 | 201602 | 201612 |
| u4435 | 201606 | NULL |
クロス結合されるテーブルは、希望のYYYYMM日付の表です。
| yearmonth |
|-----------|
| 201601 |
| 201602 |
| 201603 |
| 201604 |
| 201605 |
| 201606 |
| 201607 |
| 201608 |
| 201609 |
| 201610 |
| 201611 |
| 201612 |
| 201701 |
| 201702 |
A CROSS句が働く場所での条件で登録しようが、条件が「ON」句にある場合、これは動作しません。何故ですか?
SELECT
*
FROM
user_tbl
CROSS JOIN date_range
WHERE
user_tbl.start_yearmonth <= date_range.yearmonth
AND (user_tbl.end_yearmonth >= date_range.yearmonth
OR user_tbl.end_yearmonth IS NULL)
ORDER BY
user_tbl.user_id, date_range.yearmonth ;
どういう意味ですか?クロスジョインは 'on'をサポートしていません。あなたは2つのセットのデカルト積として考えることができます、 'on'は理にかなっていません。 – freakish
私の質問ははっきりしていると思う - 私は具体的には** WHY **のクロス結合は 'オン'をサポートしていないと頼んでいる。 'ON'は2つのテーブル間に条件を作成するために使用されますが、そうではありませんか? – psrpsrpsr
はい、クロスジョインで条件を作成しません。他のタイプの結合には 'on'条件があります**必須**。そのような単純な。クロスジョインに条件を追加する場合は、クロスジョインステートメントの外側で条件を実行する必要があります。 – freakish