値が異なる列に基づいて 2 つのテーブルを結合する必要がある状況に遭遇しました。
例えば
Table1
列ありT1
Table2
列ありT2
T1
値のある100行がありますP
と
T2
値のあるN
50 行と値のある 50 行がありますP
値を持つテーブルTable1
と値P
を持つTable2
テーブルを結合したいN
P
合計100件のレコードが得られるはずです。
値が異なる列に基づいて 2 つのテーブルを結合する必要がある状況に遭遇しました。
例えば
Table1
列ありT1
Table2
列ありT2
T1
値のある100行がありますP
と
T2
値のあるN
50 行と値のある 50 行がありますP
値を持つテーブルTable1
と値P
を持つTable2
テーブルを結合したいN
P
合計100件のレコードが得られるはずです。
これを試して:
SELECT
t1.t1,
t2.t2
FROM Table1 t1
INNER JOIN Table2 t2 ON t2.t2 IN('N', 'P')
WHERE T1.t1 = 'p';
述語は、 と の値をIN ('N', 'P')
持つ table2 から t2 の値を取得します。N
P
このWHERE
節は、値が である tabale1 から t1 の値を取得します。この述語を条件P
に移動できます。JOIN
Across join
は、左側のテーブルのすべての行に対して、右側のテーブルのすべての行を繰り返します。where
次に、句で「無関係な」条件を指定できます。
select *
from Table1 t1
cross join
Table2 t2
where t1.col1 = 'N'
and t2.col1 in ('N', 'P')
あなたのシナリオでは、両方のテーブルに多くの重複があるため、どの結合もクロス結合として機能します (100 行の「P」を持つテーブル 1 と 50 行の「P」を持つテーブル 2)。
select t1.*,t2.*
from Table1 t1
join Table2 t2
where t1.field1 = 'N'
and t2.field1 IN ('N', 'P')
また、100 行のみを取得するという要件は不可能です。table1 の「P」の最初の行は、「P」を使用して table2 の 50 行と結合されるため、table1 の各行に対して 50 行が出力されます。
本当に 100 行が必要な場合は、LIMIT
ORTOP
をフィルター条件として入力します。
これがお役に立てば幸いです!!!