sql - 在 bash 中循环遍历 PostgreSQL 表

标签 sql bash postgresql

我有一个以下格式的 PostgreSQL 表:

uid  |    defaults  |  settings
-------------------------------
abc  |   ab, bc     |     -
     |              |
pqr  |   pq, ab     |     -
     |              |
xyz  |   xy, pq     |     -

我试图在 defaults 列中列出所有包含 ab 的 uid。在上述情况下,必须列出abcpqr

我如何形成查询并围绕表循环以检查 bash 中的每一行?

最佳答案

@user000001 already provided the bash part .查询可以是:

SELECT uid
FROM   tbl1
WHERE  defaults LIKE '%ab%'

但这本质上是不可靠的,因为这也会找到“fab”或“abz”。创建快速索引也很困难。

考虑规范化您的架构。这意味着您将有另一个 1:n 表 tbl2,其中包含用于各个默认值的条目和指向 tbl1 的外键。那么您的查询可能是:

SELECT uid
FROM   tbl1 t1
WHERE  EXISTS
   (SELECT 1
    FROM   tbl2 t2
    WHERE  t2.def = 'ab'  -- "default" = reserved word in SQL, so I use "def"
    AND    t2.tbl1_uid = t1.uid);

或者至少为默认值 使用一个数组。那么您的查询将是:

SELECT uid
FROM   tbl1
WHERE  'ab' = ANY (defaults);

关于sql - 在 bash 中循环遍历 PostgreSQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229645/

相关文章:

Mysql:从尝试插入中获取ID的最有效方法?

bash - "while read -r line; do ...; done < file` 和 `cat file | while IFS= read -r line; do ...; done` 之间的 bash 有什么区别吗?

linux - 庆典 shell : how to rename files

sql - 锁定引用表 postgres 的行

postgresql - pg_dump 不设置 search_path

sql - 如何将 TSQL 聚合函数转换为 Postgresql

sql - SQL条件插入

mysql - LOCK TABLES 表示表未锁定后在 UNION 查询上进行 SELECT

linux - 在 Bash 中将命令作为字符串执行

ruby-on-rails - 如何优化对数千个 ID 的查询