sql >> データベース >  >> RDS >> Oracle

Oracleの特定の列からレコードを取得します

    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')
    



    1. EntityFrameworkをインストールせずに動作するようにODP.NETをデプロイおよび構成する

    2. 2つのフィールドを使用しないことでグループ化する合計

    3. Rails:.limit(5)を呼び出すと、結果の順序が変わります

    4. AWS EC2のMySQL-どのようにスケーリングしますか?