【问题标题】:combining multiple table with different number of columns based on one column基于一列组合具有不同列数的多个表
【发布时间】:2019-12-30 08:31:27
【问题描述】:

我正在执行两个 SELECT 查询。第一个是获取roomid, roomname, message, sender, date,第二个是获取进入房间的新加入用户的数量,您可以在?column? 中看到结果。我通过在两个结果中使用UNION 来获得该表。但是这个版本是不需要的,它在roomid 列上应该是唯一的。几天来,我一直试图弄清楚这一点。请指出正确的方向。

以下是我的 SQL 查询:

select roomdetails.roomid as roomid, roomname, message, sender, date, 0 
from roomdetails
union
select convo.roomid as roomid, null, null, null, null, count(convo.id) 
from convo 
group by convo.roomid

如何使roomid 的值不包含如下重复项?

【问题讨论】:

  • Postgres 还是 SQLite?这是两种截然不同的数据库产品
  • 我正在我的 postgresql 上进行测试。但稍后我也会尝试使用 sqlite。我的查询会在不同的引擎上产生不同的输出吗?
  • 不要在您不会在生产中使用的 DBMS 上进行测试和开发。

标签: sql postgresql sqlite android-room


【解决方案1】:

试试这个:

 select roomdetails.roomid as roomid, roomname, message, sender, date,mysum
  from roomdetails join (
       select convo.roomid as roomid,count(convo.id) mysum 
        from convo group by convo.roomid
    ) a using (roomid)

【讨论】:

  • 我已经尝试过了,我想我们快到了男孩们......我现在得到的错误是“常见的列名 'roomid' 在左表中出现了不止一次”
【解决方案2】:

一个相关的子查询看起来像一个直接的(不使用多余的空值)要考虑的选项:

select roomid, roomname, message, sender, date, 
       ( select count(c.id) from convo c where c.roomid = r.roomid ) as cnt_roomid
  from roomdetails r

【讨论】:

  • 非常好:) @dude
最近更新 更多