Postgresql选择column = array的行

时间:2012-05-24 13:27:38

标签: 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;

在PostgreSQL中是否支持使用数组进行搜索,或者我必须做一些与我的解决方案类似的事情?

4 个答案:

答案 0 :(得分:89)

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}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

对于动态SQL使用:

routes.MapRoute( name: "Search", url: "ProductStateLookup/{search}", defaults: new { controller = "ProductStateLookup", action = "Index", id = UrlParameter.Optional } );

实施例

.../ProductStateLookup/1234

结果: 'IN(' ||array_to_string(some_array, ',')||')'

答案 3 :(得分:1)

就我而言,我需要处理包含数据的列,因此使用IN()无效。 感谢@Quassnoi的示例。 这是我的解决方案:

func main() {
    m := matrix.Matrix{Element: [][]float64{{1, 2}, {3, 4}}}

    fmt.Println(m) // i want this to just return [[1 2] [3 4]] (as Element field)
                   // and explicitly refer to a matrix.Matrix.Element field, without other fields involved
}

在迷迷糊糊之前,我花了将近6个小时。