首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在设置字段时选择Postgres查询

在设置字段时选择Postgres查询
EN

Stack Overflow用户
提问于 2018-01-29 12:42:33
回答 1查看 414关注 0票数 3

我有一张桌子topics。我有两个查询,它们选择不同的数据,一个用于表votings,一个来自表messagestopics有一个字段m_group,它是messages的外键。这个字段可以是NULL,也可以是messages中条目的组(group是本表中的一个字段)。如果将此字段设置为组,则应执行查询1以选择所有消息;如果未设置该字段,则应执行查询2以选择此特定主题的所有投票。我在Apache PHP服务器上使用Postgres和PHP。

现在我的问题是,推荐的方法是什么。我想出了两个解决方案(不确定解决方案2是否真的可行,还没有尝试)。

解决方案1

首先选择字段m_group。然后确定它是否通过PHP设置,并执行相关的查询。

解决方案2

使用IF THEN ELSE语句

基本上,查询应该如下所示

代码语言:javascript
复制
IF t.m_group IS NULL 
THEN
    query2
ELSE
    query1

如前所述,我不确定解决方案2是否可行。处理这件事最好的方法是什么?解决方案1执行两个查询,我认为这是低效的。

更新

如上所述,它应该执行对特定主题的查询。您有这个主题的id。如何在解决方案2中指定这一点?如果在查询中指定的话,IF THEN ELSE语句是否已经知道主题的别名t

EN

回答 1

Stack Overflow用户

发布于 2018-08-29 07:02:20

如果我对您的理解是正确的,您需要使用两个子查询作为数据集,而您应该根据m_group字段中的内容使用其中的一个作为源。如果只选择几行,则第二种方法是好的。但是,如果需要从表中获取大量数据,则需要执行太多的子查询。我宁愿先从主题中获取所需的所有数据,然后在这两个查询中选择所需的数据。伪SQL查询如下所示:

代码语言:javascript
复制
with t1 as (select t.id, group_m, ... from topics t where t.m_group is not null),
t2 as (select t.id, ... from topics t where t.m_group is null)
select id, title, SUM(subtable_id) AS votes
from query1
join t1 on t1.id = query1.id and...
union
select id, title, SUM(subtable_id) AS votes
from query2
join t2 on t2.id = query2.id and... 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48501558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档