Sql SQLite多表查询
Sql query for multiple tables of SQLite
我有一个 SQL 数据库 (pq),其中包含 3 个表,示例如图所示。我正在努力实现以下目标:
Select 只有来自 Table 3
中 MEASUREMENT column
的变量 P
的行。我尝试了以下查询,但没有产生正确的输出。
select distinct pq_data.READ_TIME,OBS_METER,MEASUREMENT,VALUE from pq_data ORDER BY MEASUREMENT;
然后根据OBS_METER
id把Table1的数据列CUST_CLASS
,SOLAR
取出到Table3 . OBS_METER
列在 Table 1 中不可用,但可以从 Table 2 中的 OBS_LOCATION
获得。
SQL 查询的预期输出是 Table 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
..........
我搜索了 现有答案: , 2 但我无法编写一个 SQL 查询来产生高于预期的输出。
Select only rows with variable P from the MEASUREMENT column in Table 3.
select * from pq_data WHERE MEASUREMENT='P';
Then, fetch the data columns CUST_CLASS, and SOLAR from Table 1 into
Table 3 according to 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'
The expected output of SQL query is Table 3 with additional columns
from other tables:
您没有指定哪个 table 是您想要的 rowid,我假设它来自 pq_data。
此外,我不知道 pq_data 上的条目是否总是在 meter_mapping(和 location_maping)中有匹配项。如果不是,则需要使用“左连接”(或右连接)。
如果您在问题中使用 table 的实际名称(而不是 table 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'
我有一个 SQL 数据库 (pq),其中包含 3 个表,示例如图所示。我正在努力实现以下目标:
Select 只有来自
Table 3
中MEASUREMENT column
的变量P
的行。我尝试了以下查询,但没有产生正确的输出。select distinct pq_data.READ_TIME,OBS_METER,MEASUREMENT,VALUE from pq_data ORDER BY MEASUREMENT;
然后根据
OBS_METER
id把Table1的数据列CUST_CLASS
,SOLAR
取出到Table3 .OBS_METER
列在 Table 1 中不可用,但可以从 Table 2 中的OBS_LOCATION
获得。SQL 查询的预期输出是 Table 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
..........
我搜索了 现有答案:
Select only rows with variable P from the MEASUREMENT column in Table 3.
select * from pq_data WHERE MEASUREMENT='P';
Then, fetch the data columns CUST_CLASS, and SOLAR from Table 1 into Table 3 according to 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'
The expected output of SQL query is Table 3 with additional columns from other tables:
您没有指定哪个 table 是您想要的 rowid,我假设它来自 pq_data。
此外,我不知道 pq_data 上的条目是否总是在 meter_mapping(和 location_maping)中有匹配项。如果不是,则需要使用“左连接”(或右连接)。
如果您在问题中使用 table 的实际名称(而不是 table 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'