こんにちはみんな私は少し困惑している小さな苦境を持っています. 次のようなテーブルがあります(これは実際のテーブルのサンプルです。元のテーブルには機密データが含まれているため、これを使用して説明します。)
CREATE TABLE TEST01(
TUID VARCHAR2(50),
FUND VARCHAR2(50),
ORG VARCHAR2(50));
Insert into TEST01 (TUID,FUND,ORG) values ('9102416AB','1XXXXX','6XXXXX');
Insert into TEST01 (TUID,FUND,ORG) values ('9102416CC','100000','67130');
Insert into TEST01 (TUID,FUND,ORG) values ('955542224','1500XX','67150');
Insert into TEST01 (TUID,FUND,ORG) values ('915522211','1000XX','67XXX');
Insert into TEST01 (TUID,FUND,ORG) values ('566653456','xxxxxx','xxxxx');
Insert into TEST01 (TUID,FUND,ORG) values ('9148859fff','1XXXXXX','X6XXX');
挿入後の表データ
"TUID" "FUND" "ORG"
"9102416AB" "1XXXXX" "6XXXXX"
"9102416CC" "100000" "67130"
"955542224" "1500XX" "67150"
"915522211" "1000XX" "67XXX"
"566653456" "xxxxxx" "xxxxx"
"9148859fff" "1XXXXXX" "X6XXX"
「X」はワイルド カード要素です*(これを継承し、テーブル形式を変更できません)* 次のようなクエリを作成したいと思います
select tuid from test01 where fund= '100000' and org= '67130'
しかし、私が本当にやりたいのは、「X」を含むそれらのセグメントを含むレコードを取得することです
in other words the expected output here would be
"TUID" "FUND" "ORG"
"9102416AB" "1XXXXX" "6XXXXX"
"9102416CC" "100000" "67130"
"915522211" "1000XX" "67XXX"
"566653456" "xxxxxx" "xxxxx"
あらゆる方法で組織と資金を比較する必要があるため、12 のようなステートメントが含まれる大規模な SQL ステートメントを書き始めました。これが私が向かったところです。しかし、もっと良い方法があるかどうか疑問に思っています。
select * from test02
where fund = '100000' and org = '67130'
or fund like '1%' and org like '6%'
or fund like '1%' and org like '67%'
or fund like '1%' and org like '671%'
or fund like '1%' and org like '6713%'
or fund like '1%' and org like '67130'
or fund like '10%' and org like '6%'...etc
/*seems like there should be a better way..*/
誰かこのSQL文を考え出す手を貸してくれませんか...
ところでそれに注意してください
"9148859fff" "1XXXXXX" "X6XXX"
org の 2 桁目が「6」であり、「67130」のようなものを探しているため、期待される結果から除外されます