반응형
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
반응형
'source' 카테고리의 다른 글
MongoDB-CR 인증 실패 (0) | 2023.05.04 |
---|---|
WPF 애플리케이션에서 App.config 파일을 사용하는 방법은 무엇입니까? (0) | 2023.05.04 |
MongoDB에서 count()와 find()의 차이.count() (0) | 2023.05.04 |
로컬 깃 커밋을 취소하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
Xcode에서 특정 소스 파일의 모든 경고를 억제하는 방법은 무엇입니까? (0) | 2023.05.04 |