我有兩個表: 表a包含每個c_id每分鐘的值。 (如果c_id缺少數據,分鐘 - 缺少行)。SQL連接添加缺少數據的時間和標識符
表一:包含所有分鐘
---------------------------------
| c_id | TIME_SEC | C_VALUE |
---------------------------------
| 1 | 1431943200 | 10 |
---------------------------------
| 1 | 1431943260 | 11 |
---------------------------------
| 2 | 1431943200 | 12 |
---------------------------------
表時間:
------------
| TIME_SEC |
------------
|1431943140|
------------
|1431943200|
------------
|1431943260|
------------
|1431943320|
------------
我想在一個包括失蹤數據的所有數據倍之間給出c_ids。例如,對於:在1431943140之間 C_ID(1,2)和TIME_SEC和1431943320
預期的結果是:
---------------------------------
| c_id | TIME_SEC | C_VALUE |
---------------------------------
| 1 | 1431943140 | null |
---------------------------------
| 1 | 1431943200 | 10 |
---------------------------------
| 1 | 1431943260 | 11 |
---------------------------------
| 1 | 1431943320 | null |
---------------------------------
| 2 | 1431943140 | null |
---------------------------------
| 2 | 1431943200 | 12 |
---------------------------------
| 2 | 1431943260 | null |
---------------------------------
| 2 | 1431943320 | null |
---------------------------------
將缺少的數據表中的是不是一種選擇,因爲它增加了巨大量數據。
我試圖用這個SQL:
select *
from
(
select * from
a where c_id IN (1,2) AND TIME_SEC between 1431943140 and 1431943320
) m
right join times t
on (m.TIME_SEC = t.TIME_SEC);
但它返回缺少全球每分鐘的數據 - 所有的c_id:
---------------------------------
| c_id | TIME_SEC | C_VALUE |
---------------------------------
| null | 1431943140 | null |
---------------------------------
| 1 | 1431943200 | 10 |
---------------------------------
| 1 | 1431943260 | 11 |
---------------------------------
| 2 | 1431943200 | 12 |
---------------------------------
| null | 1431943320 | null |
---------------------------------
任何幫助嗎?
你的'where'子句將'left join'變成'inner join'。 – fancyPants
你是對的。我認爲,編輯和修復。 –
它不會給出空值。 – BobTheBuilder