0

左結合句内に「IN」ステートメントを含めることは可能ですか? 2 つの列を持つ 2 つのテーブルがあります。

Table 1:                  Table 2:

Column1:                  Column2:

192192,                   192192
119202                    119202
810395                    810395
975643,                   975643
908574,,                  908574

ご覧のとおり、tbl1.col1 にはエントリがあり、末尾にカンマがあるか、まったくないエントリがあります。列 1 に列 2 が含まれているか、それらが等しい 2 つのテーブルを結合する必要があります。列 1 に列 2 が含まれる場所を結合することは理にかなっています。結合を達成するためのより良い方法があるのではないでしょうか?

テーブル 2 のデータにアクセスするには、この 2 つを結合する必要があります。そのため、列 1 にコンマが 1 つまたは 2 つ含まれる可能性を考慮して、列を揃える必要があります。何か提案はありますか?

4

3 に答える 3

1

またsubstr、最初のテーブル列をトリミングし、左外部結合を次のように使用するように機能することもできます。

使用substr

 select t1.col1, t2.col2
 from table1 t1 left join table2 t2
 on substr(t1.col1, 0, length(t1.col1)-1) = t2.col2;

使用replace

 select t1.col1, t2.col2
 from table1 t1 left join table2 t2
 on replace(t1.col1, ',' , '')= t2.col2;

上記のクエリは両方ともMySQLとOracleで機能するはずです。

于 2012-10-22T21:33:50.567 に答える
1

これが単なる1回限りの取引またはステージングテーブルであり、実際の製品テーブルではない場合:(これはコンマの番号がどこにあっても機能します)

select <column list>
from table1 t1
join table2 t2 on replace(t1.col1, ',','') = t2.col2

また

select <column list>
from table1 t1
join table2 t2 on  cast(t2.col2 as varchar (10)) like t1.col1+'%'

(2つの列のデータ型に応じて、キャストが必要な場合と不要な場合があります。一方はvarcharで、もう一方は整数であると想定していました)

または(これは、値が常に同じ長さになる場合にのみ機能します

select <column list>
from table1 t1
join table2 t2 on left(t1.col1,6) = t2.col2

これが実際のprodテーブルである場合、関数への結合でパフォーマンスの問題が発生する可能性があるため、代わりにデータを修正してください。

于 2012-10-22T21:08:42.047 に答える
1

rtrim()はこれに最適だと思います:

SELECT *
FROM   table1 t1
JOIN   table2 t2 ON trim(t1.col1, ',') = t2.col2;
于 2012-10-22T21:11:10.293 に答える