سؤال

وهذا هو النوع من الأسئلة SQL مبتدئ، كما أعتقد، ولكن هنا يذهب.

ولدي استعلام SQL (SQL خادم 2005) أنني قد وضعت معا على أساس مثال على دالة معرفة من قبل المستخدم:

SELECT 
    CASEID,
    GetNoteText(CASEID)
FROM 
( 
    SELECT 
        CASEID 
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) i
GO 

وعلى UDF يعمل بشكل ممتاز (أنه يسلسل البيانات من عدة صفوف في جدول مرتبط، إذا ما يهم على الإطلاق) ولكن أنا في حيرة من أمري "أنا" بعد عبارة FROM. الاستعلام يعمل بشكل جيد مع ط لكن فشل دون ذلك. ما هو المغزى من "أنا"؟

وتحرير: كما لوحظ جويل أدناه، انها ليست الكلمة

هل كانت مفيدة؟

المحلول

عند استخدام استعلام فرعي في عبارة FROM، تحتاج إلى إعطاء الاستعلام اسم. منذ الاسم لا يهم حقا لك، شيء بسيط مثل 'أنا' أو '' غالبا ما يتم اختياره. ولكن هل يمكن وضع أي اسم يوجد لwanted- ليس هناك أهمية ل'ط' من تلقاء نفسه، وانها بالتأكيد ليست الكلمة.

إذا كان لديك استعلام معقد حقا، قد تحتاج للانضمام الاستعلام الفرعي الخاص بك مع الاستعلامات أو جداول أخرى. في هذه الحالة يصبح اسم أكثر أهمية ويجب عليك أن تختار شيئا أكثر وضوحا.

نصائح أخرى

وأسماء ط (فرعي)، وهو مطلوب، وكذلك الحاجة لينضم أبعد من ذلك.

وسيكون لديك لبادئة الأعمدة في الاستعلام الخارجي مع اسم فرعي عندما يكون هناك تضارب أسماء الأعمدة بين الجداول المرتبطة، مثل:

SELECT 
    c.CASEID, c.CASE_NAME,
    a.COUNT AS ATTACHMENTSCOUNT, o.COUNT as OTHERCOUNT,
    dbo.GetNoteText(c.CASEID)
FROM CASES c
LEFT OUTER JOIN
( 
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        ATTACHMENTS 
    GROUP BY 
        CASEID 
) a
ON a.CASEID = c.CASEID
LEFT OUTER JOIN
(
    SELECT 
        CASEID, COUNT(*) AS COUNT
    FROM 
        OTHER
    GROUP BY 
        CASEID 
) o
ON o.CASEID = c.CASEID

و"أنا" هو إعطاء حدد بيانكم اسم الجدول الفعلي. ويمكن أيضا أن يكون مكتوب (على ما أظن - أنا لست الرجل MSSQLSERVER) بأنها "AS أنا"

.

وكما ذكر آخرون، انها اسم مستعار اسم الجدول لفرعي.

وخارج فرعي، يمكنك استخدام i.CASEID مرجع إلى نتائج فرعي.

وانها ليست مفيدة للغاية في هذا المثال، ولكن عندما يكون لديك الاستعلامات الفرعية المتعددة، وإنما هي أداة توضيح مهمة جدا.

وعلى الرغم من أنني كنت اختيار اسم المتغير على نحو أفضل. حتى "مؤقت" هو أفضل.

وأسماء ط فرعي بحيث إذا كان لديك استعلام معقد مع العديد من الاستعلامات الفرعية وتحتاج للوصول إلى الحقول التي يمكن القيام بذلك بطريقة لا لبس فيها.

ومن الممارسات الجيدة لإعطاء الاستعلامات الفرعية الخاصة بك أسماء أكثر وصفية لمنع الالتباس الخاص بك عند بدء الدخول في كتابة الاستفسارات أطول، هناك شيء أسوأ ثم الحاجة إلى التمرير النسخ الاحتياطي من خلال عبارة SQL طويلة لأنك قد نسيت الذي ط. معرف هو حق واحد أو التي c.name الجدول / الاستعلام يتم استردادها من.

ووالدرس الذي تعلمه هو التفكير في الشخص الذي سيرث التعليمات البرمجية. كما قال آخرون، إذا كان رمز تم كتابة مثل هذا:

SELECT DT1.CASEID, GetNoteText(DT1.CASEID) 
FROM (
   SELECT CASEID 
   FROM ATTACHMENTS
   GROUP BY CASEID
) AS DT1 (CASEID);

وبعد ذلك هناك زيادة فرصة أن القارئ برزت بها وحتى قد التقط على 'DT1' في إشارة إلى "جدول مشتقة.

و"جدول مشتقة" هو مصطلح تقني لاستخدام استعلام فرعي في عبارة FROM.

وبناء الجملة كتب SQL Server يظهر أن table_alias ليس اختياري في هذه الحالة؛ "table_alias" ليست موضوعة داخل أقواس وفقا لاتفاقيات SQL للعمليات التركيب، فإن الأمور بين قوسين اختيارية. الكلمة "AS" اختيارية على الرغم منذ كان محاطا بين قوسين ...

<ط> derived_table [AS] table_alias [(column_alias [... ن])]

ومن (SQL للعمليات):
http://msdn.microsoft.com/en-us /library/ms177634(SQL.90).aspx

واتفاقيات للعمليات SQL بناء الجملة:
http://msdn.microsoft.com/en-us /library/ms177563(SQL.90).aspx

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