أمر SQL التي كتبها والخارجي الأيسر الانضمام لايوجد الترتيب الصحيح

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

سؤال

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

1  (most of the records in order)
2
4
5
6
7
8
10
11
13
15
3  (the first set of missing records)
12
9 (the rest of the missing records)
14

وجهة نظري هو أدناه. هل أحتاج إلى القيام به من قبل النظام قبل أن أفعل الصلة؟ ما الخطأ الذي افعله؟ (لقد حصلت على هذا الرأي، والرأي نفسه المحدد في المثال ديسيبل آخر يعمل بشكل صحيح.)

CREATE VIEW [dbo].[SampleView]
AS
SELECT     TOP 100 PERCENT blp.*, ISNULL(YEAR(DATEADD(month, 2, tb.[End of D&D])), 0) AS DEMO_FY
FROM         dbo.Table1 AS blp LEFT OUTER JOIN
                      dbo.Table2 AS tb ON blp.FACIL_NAME = tb.[Structure ID]
ORDER BY blp.ID

و(تحرير) نوع للحقل نوع هو [ID] [الباحث] NOT NULL الهوية (1، 1)،

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

المحلول

ومقروءة على إنشاء طريقة عرض تم فرزها في SQL Server 2005 و SQL سيرفر 2008 هناك الإصلاح ولديك لتشغيل في وضع التوافق 2000 من أجل أن تعمل. لماذا لا تفعل هذا الأمر من قبل عند تحديد من وجهة نظر؟

نصائح أخرى

وأود أن إزالة جملة ORDER BY من وجهة النظر تماما. بدلا من ذلك، حدد طلبك في الوقت الذي الاستعلام عن الرأي.

هذا دخول بلوق يجعل من الواضح جدا.

وفقط مرة أخرى النص من BOL:

<اقتباس فقرة>   

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

     

و"على الرغم من أن تعريف الرأي يحتوي على جملة ORDER BY، يتم استخدام هذا جملة ORDER BY فقط لتحديد الصفوف التي تم إرجاعها بواسطة شرط فوق. عند الاستعلام الرأي نفسه، سوف يكون أمر SQL Server لا تضمن النتائج، إلا إذا تنص على ذلك صراحة، كما هو موضح في الاستعلام التالي:

SELECT * FROM TopView
ORDER BY LastName

"

وعلى الأرجح اثنين من خوادم SQL إصدارات مختلفة قليلا. هناك الإصلاح المعروفة لهذا:

http://support.microsoft.com/kb/926292/

ويجب عليك دائما "النظام" في النقطة الأخيرة الممكنة، لأن فرز بطيء (N تسجيل N). عند تنفيذ حدد على الرأي، وسوف تشمل عادة على بعد جملة WHERE. أردت فقط لفرز أن مجموعة النتائج.

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