source

Postgresql 열 = 배열이 있는 행을 선택합니다.

nicesource 2023. 5. 4. 20:03
반응형

Postgresql 열 = 배열이 있는 행을 선택합니다.

다음은 제가 하려는 일을 요약한 것입니다.

$array[0] = 1;
$array[1] = 2;

$sql = "SELECT * FROM table WHERE some_id = $array"

분명히, 몇 가지 구문 문제가 있지만, 이것이 제가 하고 싶은 일입니다. 그리고 저는 아직 그것을 어떻게 하는지 보여주는 어떤 것도 찾지 못했습니다.

현재, 제 계획은 다음과 같은 방식으로 무언가를 하는 것입니다.

foreach($idList as $is)
    $where .= 'some_id=' . $id . ' OR';
endforeach

$sql = "SELECT * FROM table WHERE " . $where;

Postgre에서도 지원이 있습니까?SQL을 사용하여 어레이를 검색하거나 솔루션과 유사한 작업을 수행해야 합니까?

SELECT  *
FROM    table
WHERE   some_id = ANY(ARRAY[1, 2])

또는ANSI-호환성:

SELECT  *
FROM    table
WHERE   some_id IN (1, 2)

ANY구문은 배열 전체가 바인딩된 변수로 전달될 수 있기 때문에 선호됩니다.

SELECT  *
FROM    table
WHERE   some_id = ANY(?::INT[])

배열의 문자열 표현을 전달해야 합니다.{1,2}

동적 SQL의 경우 다음을 사용합니다.

'IN(' ||array_to_string(some_array, ',')||')'

DO LANGUAGE PLPGSQL $$

DECLARE
    some_array bigint[];
    sql_statement text;

BEGIN

    SELECT array[1, 2] INTO some_array;
    RAISE NOTICE '%', some_array;

    sql_statement := 'SELECT * FROM my_table WHERE my_column IN(' ||array_to_string(some_array, ',')||')';
    RAISE NOTICE '%', sql_statement;

END;

$$;

결과: NOTICE: {1,2} NOTICE: SELECT * FROM my_table WHERE my_column IN(1,2)

제 경우에는 데이터가 들어 있는 열로 작업해야 했기 때문에 IN()을 사용할 수 없었습니다.@Quassnoi의 사례에 감사드립니다.제 솔루션은 다음과 같습니다.

SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])

저는 게시물에 걸려 넘어지기 전까지 거의 6시간을 보냈습니다.

   $array[0] = 1;
   $array[2] = 2;
   $arrayTxt = implode( ',', $array);
   $sql = "SELECT * FROM table WHERE some_id in ($arrayTxt)"

언급URL : https://stackoverflow.com/questions/10738446/postgresql-select-rows-where-column-array

반응형