سؤال

لدي استعلام SQL التالي:

select
     ID, COLUMN1, COLUMN2
from
     (select ID, COLUMN1, COLUMN2, row_number() over (order by 2 DESC) NO from A_TABLE)
where
     NO between 0 and 100

ما أحاول القيام به هو اختيار أول 100 سجلات الاستعلام

select ID, COLUMN1, COLUMN2 from ATABLE order by 2 DESC

و ها هي المشاكل:

  1. على ما يبدو ، order by شرط لا يعمل.لقد لاحظت أن لدي إضافة آخر order by 2 DESC شرط بعد (...) from ATABLE, و الاستعلام إلى العمل.هل هناك شيء أفعله خطأ ؟ أو المتوقع السلوك ؟

  2. كيف يمكنني إضافة where الحدوث ؟ دعونا نقول كنت تحتاج إلى اختيار فقط أول 100 السجلات من الجدول where COLUMN1 like '%value%'.لقد حاولت إضافة جملة where بعد (...) from ATABLE ولكنها أنتجت خطأ...

مساعدة ؟ شكرا

PS:أنا باستخدام Oracle 10g R2.

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

المحلول

rownum هو زائف عمود التهم الصفوف في مجموعة النتائج بعد شرط حيث تم تطبيقها.

هل هذا ما تحاول الحصول عليه ؟

SELECT *
FROM ( 
    SELECT id, column1, column2
    FROM atable ORDER BY 2 DESC
) 
WHERE ROWNUM < 100;

لأنه الزائفة عمود بدقة عداد من الصفوف الناتجة من حيث شرط انها لن تسمح لك أن تفعل ترقيم الصفحات (أيبين 200 و 300).

وربما هذا هو ما تبحث عنه:

SELECT *
FROM
 (SELECT a.*, rownum rnum FROM
     (SELECT id, column1, column2 FROM atable ORDER BY 2 DESC) a WHERE rownum <= 300)
WHERE rnum >= 200;

نصائح أخرى

تحقق من هذه التعليمات أوراكل.وخاصة هذا الجزء:

  SELECT * 
  FROM (SELECT a.*, rownum RN 
      FROM (SELECT * 
                         FROM t1 ORDER BY key_column) a
         WHERE rownum <=7)
 WHERE rn >=5

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

select ID
,      COLUMN1
,      COLUMN2
from  (select ID
       ,      COLUMN1
       ,      COLUMN2
       ,      row_number() over (order by COLUMN1 DESC) NO
       from   A_TABLE
       where  COLUMNX LIKE '%SOME VALUE%'
      )
where  NO between 0 and 100

P. S.(إلى willcodejavaforfood) أعتقد أن استخدام row_number() هو الأفضل عندما تريد الصفوف إلى أن يؤمر.فإنه يحفظ الداخلية عرض (الفوز الكبير على القراءة).

لماذا لا تستخدم

Select top 100 ID, Column1, Column2
From A_Table
where Column1 like '%value%'
order by Column2 desc

هنا سوف تحصل على محدودية سجل من قاعدة بيانات oracle دون استخدام rownum

select * from 
    ( select ,column1,column2,row_number() over (order by columnName) as rnum 
      from table_name) 
where rnum between 5 and 10;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top