【问题标题】:sqlite create view from multiple tablessqlite 从多个表创建视图
【发布时间】:2020-08-30 03:51:10
【问题描述】:

有 3 个表:

Table A
aNo | aName | aCity
A1  | Alex  | Ohio
A2  | Nick  | LA
A3  | Sam   | Seatle
A4  | Rick  | Sydney
.
.
.

Table B
bNo | aNo | bType
B1  | A1  | big
B2  | A1  | small
B3  | A1  | small
B1  | A4  | Medium
B2  | A4  | tiny
B3  | A4  | Big

.
.


Table C
aNo | cDate | bNo
A1  | 2011  | B2
A2  | 2006  | B2
A3  | 1993  | B1
A4  | 2018  | B3
A4  | 2013  | B3
A4  | 2002  | B3
.
.

我需要创建一个视图来显示 aName、bType 和 SUM(TableB.aNo[A1,A4 only])

它应该显示如下内容:

aName | bType | A1 and A4 quantity
Alex  | Big   | 1
Alex  | Medium| Null
Alex  | small | 2
Alex  | tiny  | Null
Rick  | Big   | 1
Rick  | Medium| 1
Rick  | small | Null
Rick  | Tiny  | 1

我试过这个:

CREATE VIEW v_A1A4 
AS 
SELECT
    A.aName,
    B.bType,
    sum(C.aNo) AS Rooms_Total   
FROM
    A
INNER JOIN Room ON B.aNo = A.aNo
INNER JOIN C ON C.aNo = A.aNo
  WHERE C.aNo = 'A1' AND C.aNo = 'A4';

SELECT * FROM v_A1A4;

但这显示了新的 VIEW 表。但所有值都是 NULL。

aName | bType | A1 and A4 quantity
NULL  | NULL  | NULL

我需要显示值 A1 和 A2 的数量。

我该怎么办?

【问题讨论】:

  • b.Ano 不是一个数字,所以不清楚sum() 应该做什么。
  • 在您的样本数据中,表 C 包含 3 行 A4,Rick,bNo = B3。此 B3 链接到表 B 的行:B3,A4,仅限 Big。为什么要在结果中:Rick |大 | 1、瑞克|中型| 1、瑞克|小 | 1 个?
  • 嗨@GordonLinoff,感谢您的关注。这是一个错误,它应该是 count() ,正如您稍后在解决方案中所展示的那样。
  • 嗨@forpas,这可以澄清一下每个表的作用:需要表C,因为它决定了As的使用次数。例如。表 C 就像使用表 B 中的动物园的预订表。A1 有像 B1、B2 和 B3 这样的笼子。这些笼子有Big、Medium、Small的类型......所以我需要计算A1和A2在表C中使用了多少次。
  • 很好,但您预期结果中的数字仅来自表 B。那么结果中表 C 有什么用呢?

标签: sql sqlite sql-view


【解决方案1】:

如果我理解正确,您只想填写表ab 之间的缺失值。我不确定c 应该做什么表,但似乎不需要。

select a.ano, t.type, count(b.ano)
from a cross join
     (select distinct type from b) t left join
     b
     on a.ano = b.ano and b.type = t.type
group by a.ano, t.type;

【讨论】:

  • 需要表 C,因为它决定了 As 的使用次数。例如。表 C 就像使用表 B 中的动物园的预订表。A1 有像 B1、B2 和 B3 这样的笼子。这些笼子有Big、Medium、Small的类型......所以我需要计算A1和A2在表C中使用了多少次。
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多