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

Postgres-2つの配列の交差を返す関数?

    8.4以降、Postgresには便利な組み込み関数があり、最初の回答からの関数をより簡単に、おそらくより速くすることができます(とにかく、EXPLAINは、このクエリに対して「(cost =0.00..0.07 rows =1 width =64)」と言っています。 。"(cost =0.00..60.02 rows =1 width =64)"(元の行の場合)。

    簡略化されたコードは次のとおりです。

    SELECT ARRAY
        (
            SELECT UNNEST(a1)
            INTERSECT
            SELECT UNNEST(a2)
        )
    FROM  (
            SELECT  array['two', 'four', 'six'] AS a1
                  , array['four', 'six', 'eight'] AS a2
          ) q;
    

    そして、ええ、あなたはそれを関数に変えることができます:

    CREATE FUNCTION array_intersect(anyarray, anyarray)
      RETURNS anyarray
      language sql
    as $FUNCTION$
        SELECT ARRAY(
            SELECT UNNEST($1)
            INTERSECT
            SELECT UNNEST($2)
        );
    $FUNCTION$;
    

    と呼ぶことができます
    SELECT array_intersect(array['two', 'four', 'six']
                         , array['four', 'six', 'eight']);
    

    ただし、インラインと呼ぶこともできます:

     SELECT array(select unnest(array['two', 'four', 'six']) intersect
                  select unnest(array['four', 'six', 'eight']));
    


    1. SQL Server(T-SQL)でのPATINDEX()関数のしくみ

    2. SQLite Total()のしくみ

    3. SQL Server Management Studio(SSMS)とは何ですか?

    4. OracleからSQLServerへの画像の挿入