Oracleのセットアップ:
CREATE TABLE table_name (S_NO, id, Pid) AS
SELECT 1, 123, 'PAQ123' FROM DUAL UNION ALL
SELECT 2, 433, 'WSD3FF' FROM DUAL UNION ALL
SELECT 3, 565, 'PAS45E' FROM DUAL UNION ALL
SELECT 4, 123, 'PAQ123X' FROM DUAL UNION ALL
SELECT 5, 433, 'WSD3FFY' FROM DUAL UNION ALL
SELECT 6, 123, 'PAQ123Z' FROM DUAL;
クエリ:
SELECT *
FROM (
SELECT t.*,
(SELECT COUNT(*)
FROM table_name x
WHERE t.id = x.id
AND LENGTH(t.Pid) < LENGTH(x.pid)
AND INSTR(x.Pid, t.Pid) = 1) AS num_matches
FROM Table_name t
)
WHERE num_matches > 0;
出力:あなたが取得したい場合は
S_NO ID PID NUM_MATCHES
---------- ---------- ------- -----------
1 123 PAQ123 2
2 433 WSD3FF 1
試合はその後、あなたは、コレクションを使用することができます。
CREATE TYPE stringlist AS TABLE OF VARCHAR2(100);
/
は、クエリ:
SELECT *
FROM (
SELECT t.*,
CAST(
MULTISET(
SELECT PID
FROM table_name x
WHERE t.id = x.id
AND LENGTH(t.Pid) < LENGTH(x.pid)
AND INSTR(x.Pid, t.Pid) = 1
)
AS stringlist
) AS matches
FROM Table_name t
)
WHERE matches IS NOT EMPTY;
か(私はMULTISET
は、10gであるか分からないので):
SELECT *
FROM (
SELECT t.*,
CAST(
(
SELECT COLLECT(PID)
FROM table_name x
WHERE t.id = x.id
AND LENGTH(t.Pid) < LENGTH(x.pid)
AND INSTR(x.Pid, t.Pid) = 1
)
AS stringlist
) AS matches
FROM Table_name t
)
WHERE matches IS NOT EMPTY;
出力を
S_NO ID PID MATCHES
---------- ---------- ------- ------------------------------------
1 123 PAQ123 TEST.STRINGLIST('PAQ123X','PAQ123Z')
2 433 WSD3FF TEST.STRINGLIST('WSD3FFY')
'select * from the_tableここで、 'PAQ123%'のようなpidはありますか? –
PAQ123は動的である必要があります。それはただの例です – Pradeep
@Pradeep:動的ではどういう意味ですか?何が違うのでしょうか?どうやって? –