这是我要查询的数据: 表名:“test”,列“data”
7;"{{Hello,50},{Wazaa,90}}"
8;"{{Hello,50},{"Dobar Den",15}}"
要查询此数据,我使用此 SQL 查询:
SELECT *, pg_column_size(data) FROM test WHERE data[1][1] = 'Hello'
我如何在所有元素中搜索但在第一个子元素中而不是在第二个元素中,例如:
SELECT *, pg_column_size(data) FROM test WHERE data[][1] = 'Hello'
因为如果我这样搜索:
SELECT *, pg_column_size(data) FROM test WHERE data[1][1] = "Wazaa"
它不会返回任何东西,因为我正在硬编码以查看第一个子元素,我必须像这样修改它:
SELECT *, pg_column_size(data) FROM test WHERE data[2][1] = 'Wazaa'
如何让它检查所有父元素和第一个子元素?
有使用“ANY”查询所有元素的解决方案,但我不想在 where 语句中触及第二个元素,因为如果我在第一个子元素中有数字,它将查询第二个参数,该参数也是数字。
SELECT * FROM test WHERE '90' = ANY (data);
最佳答案
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';
或者,写this function将二维数组减少为一维数组的记录,然后您基本上可以在问题中使用所有 SQL 查询。
关于sql - Postgres SQL查询特定元素中的数组文本[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298031/