我有一个以下格式的 PostgreSQL 表:
uid | defaults | settings
-------------------------------
abc | ab, bc | -
| |
pqr | pq, ab | -
| |
xyz | xy, pq | -
我试图在 defaults
列中列出所有包含 ab 的 uid。在上述情况下,必须列出abc
和pqr
。
我如何形成查询并围绕表循环以检查 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/