我的查詢進行了正確加入,但結果不正確。
Null
值必須在列NAME_2
等於A
,我無法弄清楚什麼是錯的。SQL Right Join問題
下面是該查詢:
http://sqlfiddle.com/#!6/cd45b/1
對於未來的讀者。表的定義:
CREATE TABLE S1 (TIME_1 DateTIME, INTERVAL_1 INT, NAME_1 varchar(20),INITIAL_VAL int);
CREATE TABLE S2 (TIME_2 DateTIME, INTERVAL_2 INT, NAME_2 varchar(20), FINAL_VAL int);
相關問題的數據插入:
INSERT INTO S1 values('10.02.2017 00:00',1, 'B',13);
INSERT INTO S1 values('10.02.2017 01:00',2, 'B',14);
INSERT INTO S1 values('10.02.2017 02:00',3, 'B',10);
INSERT INTO S1 values('10.02.2017 03:00',4, 'B',15);
INSERT INTO S1 values('10.02.2017 00:00',1, 'C',42);
INSERT INTO S1 values('10.02.2017 01:00',2, 'C',10);
INSERT INTO S1 values('10.02.2017 02:00',3, 'C',22);
INSERT INTO S1 values('10.02.2017 03:00',4, 'C',18);
INSERT INTO S2 values('10.02.2017 00:00',1, 'A',12);
INSERT INTO S2 values('10.02.2017 01:00',2, 'A',13);
INSERT INTO S2 values('10.02.2017 02:00',3, 'A',9);
INSERT INTO S2 values('10.02.2017 03:00',4, 'A',16);
INSERT INTO S2 values('10.02.2017 00:00',1, 'B',16);
INSERT INTO S2 values('10.02.2017 01:00',2, 'B',22);
INSERT INTO S2 values('10.02.2017 02:00',3, 'B',20);
INSERT INTO S2 values('10.02.2017 03:00',4, 'B',10);
INSERT INTO S2 values('10.02.2017 00:00',1, 'C',42);
INSERT INTO S2 values('10.02.2017 01:00',2, 'C',15);
INSERT INTO S2 values('10.02.2017 02:00',3, 'C',22);
INSERT INTO S2 values('10.02.2017 03:00',4, 'C',19);
初始查詢從這樣一個問題:
WITH CTE1
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY NAME_1) AS V1, * FROM S1
)
,CTE2
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY NAME_2) AS V2,* FROM S2
)
SELECT
CTE2.NAME_2,
CTE2.TIME_2,
INTERVAL_2,
CTE1.INITIAL_VAL,
CTE2.FINAL_VAL
FROM CTE1
RIGHT JOIN CTE2
ON CTE1.V1=CTE2.V2
向我們展示查詢格式化測試。另外考慮切換到左連接。大多數人發現正確的加入完全混亂。 ('主表左連接可選數據'而不是'可選數據右連接主表')。 – jarlh
我認爲你在這裏感到困惑。你認爲你加入了'CTE1.name_1 = CTE2.name_2;'所以'name_2 ='A''在加入cte1時會有NULL值。但是在這裏你使用'CTE1.V1 = CTE2.V2;'這是'ROW_NUMBER()按名稱_x'排序,而不是'name_x'本身。 –
當你用Oracle標記你的問題時,你的小提琴就在sql server 2014上。你使用的是什麼rdbms? –