昔、私はこのような選択ステートメントを書くために使用していました:
SELECT
table1.columnA, table2.columnA
FROM
table1, table2
WHERE
table1.columnA = 'Some value'
ただし、「FROM」句にコンマ区切りのテーブル名を使用することはANSI92互換ではないと言われました。 JOINステートメントは常に存在する必要があります。
これは私の問題につながります。..2つのテーブル間でデータを比較したいのですが、結合を作成するための共通のフィールドが両方のテーブルにありません。 FROM句でコンマ区切りのテーブル名の「レガシー」メソッドを使用する場合(コード例を参照)、それは完全に正常に動作します。間違っているか悪い習慣だと思われる場合、この方法を使用するのは不快に感じます。
誰もこの状況で何をすべきか知っていますか?
追加情報:
Table1には「geography」データ型の場所のリストが含まれますTable2には「geography」場所の別のリストが含まれます
ロケーション間の距離を比較するために選択ステートメントを書いています。私が知っている限りでは、地理コラムでJOINを行うことはできませんか?
CROSS JOIN
を使用できます(使用する必要があります)。次のクエリはあなたのものと同等です:
SELECT
table1.columnA
, table2.columnA
FROM table1
CROSS JOIN table2
WHERE table1.columnA = 'Some value'
または、いくつかの常に真の条件でINNER JOINを使用することもできます。
FROM table1
INNER JOIN table2 ON 1=1
提案-クロス結合を使用する場合は、重複するシナリオに注意してください。あなたの場合の例:
これら2つのテーブル間に共通キーがあるため、(つまり、一方/他方の外部キー)-結果が重複します。したがって、次の形式を使用することをお勧めします。
WITH data_mined_table (col1, col2, col3, etc....) AS
SELECT DISTINCT col1, col2, col3, blabla
FROM table_1 (NOLOCK), table_2(NOLOCK))
SELECT * from data_mined WHERE data_mined_table.col1 = :my_param_value
クロス結合は、共通のフィールドを持たない複数のテーブルを結合するのに役立ちますが、この結合は2つのテーブルのデカルト結果セットを提供するため、結合中は注意してください。クエリ:
SELECT
table1.columnA
, table2,columnA
FROM table1
CROSS JOIN table2
常に真である条件で参加する代替方法
SELECT
table1.columnA
, table2,columnA
FROM table1
INNER JOIN table2 ON 1=1
ただし、パフォーマンスとコーディング標準のために、このタイプのクエリは避ける必要があります。