ما الذي تفعله عبارة NOT في هذا المثال؟أحاول إنشاء البيانات بشكل عشوائي
-
06-07-2019 - |
سؤال
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 لمزيد من المعلومات.