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

Oracleは複数のテーブルから選択します

    この要件に関する限り、これは間違いなくデータ モデルの問題です。 2 つのオプションを提案できます:

    オプション # 1: すべてのテーブルを組み合わせて 1 つのテーブル SPORTS を作成し、sport_type 列を持ちます。これにより、関数で 1 つの選択クエリを使用できるようになります。

    select  HOME,AWAY,COMP_NAME, M_TIME from SPORTS s
    where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string)
      and sport_type in 
    (
    'SOCCER',
    'BASKETBALL',
    'HANDBALL',
    'ICE_HOCKEY',
    'TENIST',
    'VOLLEYBALL'
    )
      

    オプション # 2:

    Create a view by combining all these tables and select from that view in this function.
    CREATE OR REPLACE VIEW VW_SPORTS
    AS
    select HOME,AWAY,COMP_NAME, M_TIME, 'SOCCER' SPORT_TYPE from SOCCER
    union all
    select  HOME,AWAY,LISTS,M_TIME,'BASKETBALL' SPORT_TYPE from BASKETBALL 
    union all
    select HOME,AWAY,COMP,M_TIME,'HANDBALL' SPORT_TYPE from HANDBALL
    union all
    select  HOME,AWAY,LISTS,M_TIME,'ICE_HOCKEY' SPORT_TYPE from ICE_HOCKEY
    union all
    select  HOME,AWAY,COMP,M_TIME,'TENIST' SPORT_TYPE from TENISt
    union all
    select  HOME,AWAY,LISTS,M_TIME,'VOLLEYBALL' SPORT_TYPE  from VOLLEYBALL v;
    
    
     FUNCTION SEARACH_FOR_GAMES  ( p_search_string in varchar2 )
                                 return weak_cur
      IS
        SEARCH_FIXID WEAK_CUR;   
      BEGIN  
        OPEN   SEARCH_FIXID FOR
           select  HOME,AWAY,COMP_NAME, M_TIME from VW_SPORTS s
            where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string)
             and s.SPOR_TYPE IN 
        (
        'SOCCER',
        'BASKETBALL',
        'HANDBALL',
        'ICE_HOCKEY',
        'TENIST',
        'VOLLEYBALL'
        );
        RETURN SEARCH_FIXID;
      END SEARACH_FOR_GAMES;
      


    1. Mysql Split String and Select with results

    2. ISJSON()SQL Server(T-SQL)の例

    3. エスケープするhstoreには、JDBCプリペアドステートメントに演算子が含まれています

    4. サブレポートフィルターを使用したEclipseでのBirtレポートの設計