【问题标题】:Sql query for multiple tables of SQLiteSQLite多表的sql查询
【发布时间】:2021-08-01 21:23:39
【问题描述】:

我有一个带有 3 个表的 SQL 数据库 (pq),示例如图所示。我正在努力实现以下目标:

  • 仅从Table 3 中的MEASUREMENT column 中选择具有变量P 的行。我尝试了以下查询,但没有产生正确的输出。

    select distinct pq_data.READ_TIME,OBS_METER,MEASUREMENT,VALUE from pq_data ORDER BY MEASUREMENT;

  • 然后,根据OBS_METER id,从表1中取出数据列CUST_CLASSSOLAR到表3中。 OBS_METER 列在表 1 中不可用,但可以从表 2 中的 OBS_LOCATION 获得。

  • SQL 查询的预期输出是表 3 以及来自其他表的附加列,例如:

row id        READ_TIME          OBS_METER  OBS_LOCATION   MEASUREMENT    VALUE   CUST_CLASS  SOLAR
28/01/2018 2018/01/28 01:55:00    105714         6787            P         284         R       F

..........

我搜索了现有答案12,但我无法编写 SQL 查询来产生超出预期的输出。

【问题讨论】:

  • @jarlh。将表1中的数据列CUST_CLASSSOLAR连接到表3中,然后根据OBS_METER id对数据进行分组

标签: sql sqlite group-by inner-join sql-query-store


【解决方案1】:

从表 3 的 MEASUREMENT 列中仅选择具有变量 P 的行。

select * from pq_data WHERE MEASUREMENT='P';

然后,从表 1 中取出数据列 CUST_CLASS 和 SOLAR 到 表 3 根据 OBS_METER id。

select * 
from pq_data pd
inner join meter_mapping mm on pd pd.obs_meter=mm.obs_meter
inner join location_mapping lm on mm.obs_location=lm.obs_location
WHERE pd.MEASUREMENT='P'

SQL 查询的预期输出是带有附加列的表 3 来自其他表:

你没有指定哪个表是你想要的rowid,我假设它来自pq_data。

另外,我不知道 pq_data 上的条目是否总是与meter_mapping(和location_maping)匹配。如果不是,您需要使用“左连接”(或右连接)。

如果您在问题中使用表的实际名称(而不是表 1、2 和 3)会更容易。

select pd.rowid, pd.READ_TIME, pd.OBS_METER, mm.OBS_LOCATION, pd.MEASUREMENT, pd.VALUE, lm.CUST_CLASS, lm.SOLAR
from pq_data pd
inner join meter_mapping mm on pd pd.OBS_METER=mm.OBS_METER
inner join location_mapping lm on mm.OBS_LOCATION=lm.OBS_LOCATION
WHERE pd.MEASUREMENT='P'

【讨论】:

  • 非常感谢。很好的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多