Was ist die WITH-Anweisung in diesem Beispiel zu tun? Ich versuche, zufällig Daten zu erzeugen,

StackOverflow https://stackoverflow.com/questions/1413465

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;
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top