gpt4 book ai didi

sql - column_name/value 对的过滤表

转载 作者:行者123 更新时间:2023-11-29 11:46:26 25 4
gpt4 key购买 nike

我有一个非常大的表,我想过滤列和值的黑名单组合。黑名单是一个表(小得多),其中一列是列名(称为“键”),另一列是要过滤掉的值。我不想对任何列名或值进行硬编码,因为黑名单将用于多个表。

我正在使用 postgreSQL 数据库。我只是一名分析师,所以我无法更改正在使用的表格。我一直在尝试将我的主表与黑名单左连接并过滤掉非空值,但在具体情况下如何做到这一点超出了我的范围。我也尝试过获取黑名单“键”和主表列名称的明显交集,但是如何在 WHERE 子句中使用它也太复杂了。

由于问题很容易描述,我认为一定有一个非常简单的解决方案,但可能是错误的。

黑名单表:

"client"   "key"      "value"
jamba version app
jamba country DE
jamba version mobile

主表:

"client"   "gender"   "version"   "country"
jamba m desktop DK
jamba m desktop SE
jabma f mobile DE
jamba m desktop CH
jamba f desktop DE
jamba f app GB

想要的结果:

"client"   "gender"   "version"    "country"
jamba m desktop DK
jamba m desktop SE
jamba m desktop CH

任何来自德国或具有移动/应用程序版本的内容都会被过滤。如黑名单中指定。

最佳答案

您可以使用 JSON 执行此操作:

select m.*
from main m
where not exists (select 1
from blacklist bl
where bl.client = m.client and
bl.value = to_jsonb(m.*)->>bl.key
);

这假设已知 client 在您引用的表中。如果没有,您当然也可以为此使用 json 函数。

关于sql - column_name/value 对的过滤表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56873763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com