【问题标题】:SELECT bigint[] from table, then lookup each item from bigint[] in another table从表中选择 bigint[],然后从另一个表中的 bigint[] 中查找每个项目
【发布时间】:2023-02-02 18:14:16
【问题描述】:

我有两张桌子:

包含两列的 PROJECT - PROJECTNAME (text) 和 HOSTS (bigint[])

HOST 包含三列 HOSTID (bigint) 和 IP (inet) 以及 HOSTNAME (text)

我希望编写一个执行以下操作的查询:

SELECT hosts 
FROM project
WHERE projectname = 'Project test'

然后对于主机中的每个 bigint,我希望做这样的事情:

FOREACH hostid in HOSTS(bigint[])
SELECT x,y,x FROM HOST WHERE IP <<=inet '10.10.10.0/20'

我目前正在通过多个单独的查询以低效的方式执行此操作。我真的很想了解如何将它们组合成一个简洁的查询。

谢谢,我只是想更好地了解如何构建这些查询。

【问题讨论】:

  • 我会首先修复数据模型并摆脱数组。使用附加表使用适当的多对多关系。连接不同表和记录的简单 JOIN 可以解决您的问题。
  • 示例数据最好呈现为 formatted text。有关如何创建漂亮表格的一些提示,请参阅here

标签: c# postgresql subquery


【解决方案1】:

您可以使用 ANY 运算符加入:

SELECT h.hostid, h.ip, h.hostname
FROM project p
  JOIN hosts h on h.hostid = ANY(p.hosts)
WHERE p.projectname = 'Project test'
  AND h.ip <<= inet '10.10.10.0/20';

【讨论】:

    猜你喜欢
    • 2013-12-23
    • 2015-12-25
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多