Meine Abfrage machen eine richtige Join, aber die Ergebnisse sind nicht korrekt.
Null
Werte müssen sein, wo Spalte NAME_2
ist gleich A
und ich kann nicht herausfinden, was falsch ist. HierSQL Right Beitreten Problem
ist die Abfrage:
http://sqlfiddle.com/#!6/cd45b/1
Für die Zukunft Leser. Die Definition der Tabellen:
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);
Die Daten Einsätze auf die Frage bezogen werden:
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);
Erste Abfrage von der Frage:
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
Zeigen Sie uns die Abfrage als formatierten Test auch. Berücksichtigen Sie auch einen Wechsel zum linken Join. Die meisten Leute finden richtig, verbinden sich völlig verwirrend. ('main table left join optionale Daten' anstelle von 'optionale Daten rechts beitreten Haupttabelle'.) – jarlh
Ich denke, Sie sind hier verwirrend. Sie dachten, dass Sie sich mit 'CTE1.name_1 = CTE2.name_2;' verbinden, so dass 'name_2 = 'A'' bei der Verknüpfung mit cte1 einen NULL-Wert hat. Aber hier verwenden Sie 'CTE1.V1 = CTE2.V2;' das ist 'ROW_NUMBER() order by name_x', nicht' name_x' selbst. –
Ihre Geige ist auf SQL Server 2014, während Sie Ihre Frage mit Oracle markiert haben. Welche rdbms verwendest du? –