ما الذي تفعله عبارة NOT في هذا المثال؟أحاول إنشاء البيانات بشكل عشوائي

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

سؤال

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;
هل كانت مفيدة؟

المحلول

وومع تركيب هو نفسه باستخدام جدول مؤقت محلي أو عرض المضمنة. على حد علمي، انها معتمدة فقط في SQL Server (2005+، ودعا المشترك الجدول التعبير) وأوراكل (9I +، ودعا فرعي العوملة). الاستخدام المقصود هو لخلق وجهة نظر الأساسي الذي يتم استخدامه. (أي: انضم ل) عدة مرات في استعلام واحد

إليك مثال نموذجي:

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

... الذي سيعود نتائج متطابقة إذا كنت تستخدم:

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

والمثال الذي قدمته:

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;

... هو واحد عودي. انها ابتداء من الساعة 1، وتوليد 999 fileuids في المجموع (سيكون 1000 إذا كان قد بدأ عند 0).

نصائح أخرى

WITH x AS (...)

وهذا سيستغرق إخراج ... والتعامل معها على أنها جدول يسمى x، مؤقتا.

WITH x AS (...)
SELECT * FROM x

وهذا البيان سوف تعطي أساسا لك نفس الشيء بالضبط كما مخرجات ... ولكن بدلا من ذلك المشار إليها باسم x الجدول

ويستخدم كلمة مع لخلق التعبير الجدول المشترك (CTE). في هذه الحالة، فإنه تهيئة الجدول مضمنة أن "تحديد fileUID، .." الجزء هو سحب البيانات من.

يقوم بإنشاء CTE (تعبير الجدول العام).هذا في الأساس جدول لا يتعين عليك إنشاؤه أو إسقاطه أو الإعلان عنه بأي حال من الأحوال.سيتم حذفه تلقائيًا بعد تشغيل الدفعة.

الدفع http://4guysfromrolla.com/webtech/071906-1.shtml لمزيد من المعلومات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top