値が異なる列に基づいて 2 つのテーブルを結合する必要がある状況に遭遇しました。
例えば
Table1列ありT1Table2列ありT2T1値のある100行がありますP
と
T2値のあるN50 行と値のある 50 行がありますP
値を持つテーブルTable1と値Pを持つTable2テーブルを結合したいNP
合計100件のレコードが得られるはずです。
値が異なる列に基づいて 2 つのテーブルを結合する必要がある状況に遭遇しました。
例えば
Table1列ありT1Table2列ありT2
T1値のある100行がありますP
と
T2値のあるN50 行と値のある 50 行がありますP値を持つテーブルTable1と値Pを持つTable2テーブルを結合したいNP
合計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 の値を取得します。NP
この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 行が必要な場合は、LIMITORTOPをフィルター条件として入力します。
これがお役に立てば幸いです!!!