Əsas səhifə > MySQL > Emulating Oracle’s rownum in MySQL

Emulating Oracle’s rownum in MySQL

Oracle-dan bilinən çox faydalı bir xüsusiyyətdən söhbət açırıq. Qısa olaraq:
ROWNUM is an Oracle pseudo column which numbers the rows in a result set.

Yəni ROWNUM select-dən neçə ROW qayıtdığını bizə göstərir:

    SELECT rownum, table_name
    FROM user_tables;

    ROWNUM        TABLE_NAME                     
    ------------- -----------------
    1             EMP
    2             DEPT
    3             BONUS
    4             SALGRADE
    5             DUMMY

    5 rows selected

Belə bir xüsusiyyət MySQL-də olmadığı üçün biz workaround fikirləşib tapmalıyıq.

2 üsulla buna nail ola bilərik.
Cədvəlimizdə 30 row var:

mysql> select department_name from departments;
.
.
30 rows in set (0.00 sec)

ROWNUM-ı aşağıdakı şəkildə generate edə bilərik:

select 
    @rownum:=@rownum + 1 as rownum, 
	department_name
from
    (SELECT @rownum:=0) as r
        inner join
    departments;

+--------+--------------------+
| rownum | department_name    |
+--------+--------------------+
|      1 | BERKSHIRE          |
|      2 | CAMDEN             |
|      3 | CHAMPAIGN          |
|      4 | CHARITON           |
.
.
.
|     26 | TAZEWELL           |
|     27 | VENTURA            |
|     28 | WHATCOM            |
|     29 | WILKES             |
|     30 | WOOD               |
+--------+--------------------+
30 rows in set (0.00 sec)

2-ci üsulda isə session variable-dan istifadə edəcik yəni join-siz:

-- 1
set @row=0;

-- 2
select 
	@row:=@row+1 as rownum,
    department_name
from
	departments;

+--------+--------------------+
| rownum | department_name    |
+--------+--------------------+
|      1 | BERKSHIRE          |
|      2 | CAMDEN             |
|      3 | CHAMPAIGN          |
|      4 | CHARITON           |
.
.
.
|     26 | TAZEWELL           |
|     27 | VENTURA            |
|     28 | WHATCOM            |
|     29 | WILKES             |
|     30 | WOOD               |
+--------+--------------------+
30 rows in set (0.00 sec)

Bunda əlavə əgər biz tapılan row sayını öyrənmək istəyiriksə sql_calc_found_rows-dan istifadə edə bilərik:

select 
	sql_calc_found_rows
    department_name
from
    departments;

və daha sonra da :

mysql> select found_rows();
+--------------+
| found_rows() |
+--------------+
|           30 |
+--------------+
1 row in set (0.08 sec)

Təşəkkürlər😉

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: