ich zwei Abfragen zu kombinieren haben:SQL kommen auf CTE mit mehreren
Abfrage 1 - eine einfache innere Verknüpfung wo Abfrage:
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t1.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P'
Diese eine Tabelle mit 4 Spalten natürlich zurück. Lassen Sie mich es hier ziehen:
+----+----+----+-------+
| C1 | C2 | C3 | T2.C1 |
+----+----+----+-------+
| | | | |
Abfrage 2 - mit, dann „durch partition“ Anweisung mit einem Duplikate entfernen:
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1
Dies gibt zwei Spalten, mit den alle Duplikate entfernt, (was bedeutet, wenn Spalte 1 Duplikate die zusätzlichen Zeilen enthält explizit) entfernt:
+-----+-----+
| ONE | TWO |
+-----+-----+
| | |
Also, was ich möchte ist die erste Abfrage und die zweite Abfrage wie folgt kombiniert, um zu sehen, wo zwei der Tabelle hinzugefügt wird, wo ONE stimmt mit C1 überein:
+------+----+----+-------+-----+
| C1 | C2 | C3 | T2.C1 | TWO |
|(ONE) | | | | |
+------+----+----+-------+-----+
| | | | | |
Also, ich habe versucht INTERSECT, Platzhalter Zeilen hinzufügen. das kehrte leer zurück.
Ich habe versucht, Abfrage 1 ein CTE als auch dann Beitritt der beiden - bekam eine Vielzahl von Fehlern versuchen, dass.
Hier ist das Beste, was ich in der Lage gewesen, mit so weit zu kommen - Abfrage 1 in mit Abfrage 2 in seiner select-Anweisung verbindet:
--ALL COL1 WITH beginning
WITH all_col1 (ONE, TWO) AS
(
SELECT col1, col2
FROM Schema1.Table1
UNION
SELECT col1, col2
FROM Schema2.Table2
UNION
SELECT col1, col2
FROM Schema2.Table3
)
--ALL COL1 SELECT duplicate_count
SELECT *
FROM (
SELECT ONE, TWO,
ROW_NUMBER() OVER(PARTITION BY ONE ORDER BY ONE) duplicate_count
FROM all_col1
-- added join opperation
join (
--SELECT from query 1
Select t1.c1, t1.c2, t1.c3, t2.c1
from s1.t2 t2
inner join s1.t1 t1 on t2.c6 = t5.c6
where t2.c5 >= '2014-01-01'
and t2.c5 >= '2014-01-01'
and t1.c4 = 'P'
-- finish join opperation
) as query1
on all_col1.ONE = query1.c1 -- <----MOST IMPORTANT PART
-- finsih ALL COL1
) all_col1_w_duplicat_count
WHERE duplicate_count = 1
Dies ist leider nicht geben Sie mir die Ergebnisse zu den verbundenen die erste Spalte jeder Abfrage, wie es versuchte mit on all_col1.ONE = t1.c1
zu fragen, stattdessen scheint es wie es mir nur die WITH all_col1 gibt.
Ich weiß fast nichts über SQL, Was muss ich lernen, um diese beiden Abfragen zusammen richtig zu verbinden?
Können Sie bitte Beispieldaten zeigen, und die gewünschten Ergebnisse? Ich kann nicht folgen, was Sie nur mit den Abfragen versuchen möchten ... – Siyual
Ihre zweite Abfrage ist viel zu kompliziert. Die "UNION" entfernt Duplikate. –
@Siyual Entschuldigung, ich hätte diese Grafiken zum ersten Mal hinzufügen sollen. Ich habe sie jetzt hinzugefügt. –