Was ist die WITH-Anweisung in diesem Beispiel zu tun? Ich versuche, zufällig Daten zu erzeugen,
-
06-07-2019 - |
Frage
INSERT INTO files (fileUID, filename)
WITH fileUIDS(fileUID) AS
( VALUES(1) UNION ALL
SELECT fileUID+1 FROM fileUIDS WHERE fileUID < 1000 )
SELECT fileUID,
TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefgHij', '1234567890' )
FROM fileUIDS;
Lösung
Die WITH Syntax ist die gleiche wie entweder eine lokale temporäre Tabelle oder Inline-Ansicht. Mein Wissen ist es nur in SQL Server unterstützt (2005+, Common Table Expressions genannt) und Oracle (9i +, genannt Subquery Factoring). Die bestimmungsgemäße Verwendung ist für eine grundlegende Ansicht erstellen, die verwendet wird. (Dh verbunden) mehrfach in einer einzigen Abfrage
Hier ist ein typisches Beispiel:
WITH example AS (
SELECT q.question_id,
t.tag_name
FROM QUESTIONS q
JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
JOIN TAGS t ON t.tag_id = qtf.tag_id)
SELECT t.title,
e1.tag_name
FROM QUESTIONS t
JOIN example e1 ON e1.question_id = t.question_id
... die identischen Ergebnisse zurück, wenn Sie verwenden:
SELECT t.title,
e1.tag_name
FROM QUESTIONS t
JOIN (SELECT q.question_id,
t.tag_name
FROM QUESTIONS q
JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
JOIN TAGS t ON t.tag_id = qtf.tag_id) e1 ON e1.question_id = t.question_id
Das Beispiel, das Sie zur Verfügung gestellt:
WITH fileUIDS(fileUID) AS (
VALUES(1)
UNION ALL
SELECT t.fileUID+1
FROM fileUIDS t
WHERE t.fileUID < 1000 )
INSERT INTO files
(fileUID, filename)
SELECT f.fileUID,
TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefgHij', '1234567890' )
FROM fileUIDS f;
... ist eine rekursive ein. Es wird beginnend bei 1, Erzeugen von 999 fileuids insgesamt (es würde 1000 sein, wenn es bei 0 begonnen hatte).
Andere Tipps
WITH x AS (...)
Das wird die Ausgabe des ...
nehmen und es als eine Tabelle mit dem Namen x
behandeln, vorübergehend.
WITH x AS (...)
SELECT * FROM x
Diese Aussage werden Ihnen im Wesentlichen gibt genau die gleiche Sache wie die ...
Ausgänge, aber es wird stattdessen als die Tabelle x
referenziert wird
Das MIT Wort wird verwendet, um einen allgemeinen Tabellenausdruck (CTE) zu erstellen. In diesem Fall ist es die Schaffung eines Inline-Tabelle, dass die „fileUID wählen, ...“ Teil zieht Daten aus.
Es ist die Schaffung CTE (Common Table Expression). Dies ist eine im Grunde eine Tabelle, die Sie müssen sowieso nicht schaffen, fallen, oder erklären in. Es wird automatisch gelöscht, nachdem der Stapel läuft hat.
Schauen Sie sich http://4guysfromrolla.com/webtech/071906-1.shtml für weitere Informationen.