Emr*_*dov 7 sql arrays postgresql
这是我要查询的数据:表名:"test",列"data"
7;"{{Hello,50},{Wazaa,90}}"
8;"{{Hello,50},{"Dobar Den",15}}"
Run Code Online (Sandbox Code Playgroud)
要查询此数据,我正在使用此SQL查询:
SELECT *, pg_column_size(data) FROM test WHERE data[1][1] = 'Hello'
Run Code Online (Sandbox Code Playgroud)
我如何搜索所有元素,但在第一个子元素中而不是在第二个元素中,例如:
SELECT *, pg_column_size(data) FROM test WHERE data[][1] = 'Hello'
Run Code Online (Sandbox Code Playgroud)
因为如果我这样搜索:
SELECT *, pg_column_size(data) FROM test WHERE data[1][1] = "Wazaa"
Run Code Online (Sandbox Code Playgroud)
它不会返回任何东西,因为我很难查看第一个子元素,我必须像这样修改它:
SELECT *, pg_column_size(data) FROM test WHERE data[2][1] = 'Wazaa'
Run Code Online (Sandbox Code Playgroud)
如何使它检查所有父元素和第一个子元素?
有一个解决方案使用"ANY"查询所有元素,但我不想触摸where语句中的第二个元素,因为如果我在第一个子元素中有数字,它将查询第二个参数,它也是数字.
SELECT * FROM test WHERE '90' = ANY (data);
Run Code Online (Sandbox Code Playgroud)
PostgreSQL对数组的支持不是特别好。一维数组很容易unnest,但 n 维数组是完全扁平化的,而不仅仅是第一维。不过,您可以使用这种方法来查找所需的记录集,但它相当难看:
SELECT test.*, pg_column_size(test.data) AS column_size
FROM test
JOIN (SELECT id, unnest(data) AS strings FROM test) AS id_strings USING (id)
WHERE id_strings.strings = 'Wazaa';
Run Code Online (Sandbox Code Playgroud)
或者,编写此函数将二维数组减少为一维数组的记录,然后您基本上可以使用问题中的所有 SQL 查询。
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |