sql - Postgres SQL查询特定元素中的数组文本[]

标签 sql arrays postgresql

这是我要查询的数据: 表名:“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/

相关文章:

c++ - 我在尝试计算涉及数组的总和和平均值时遇到问题

javascript - 使用 Ramda 处理 Promise 和 Wait

ruby-on-rails - Rails、PgBouncer 和 DigitalOcean——如何使用数据库连接池?

ruby-on-rails - 安装 rails 项目后如何处理 rails 应用程序的本地数据库和错误

mysql - 从 SQL JOIN 更新

php - UTF-8 : successful conversion to iso-8859-1 but not to iso-8859-2

mysql - 在 Eloquent 中按类别列出用户的产品

时间:2019-03-08 标签:c#linqwhereconditionalif

mysql - 如何在 MySQL 中获取当前的舍入时间?

php - 如何用我自己的文本替换某些 PHP 值?