[SQL] 어떻게 MySQL의에서 행 생성기를해야합니까?
SQL어떻게 MySQL의에서 행 생성기를해야합니까?
A의 사용할 수있는 행 오라클 구문과 유사한 가입의 임의의 번호를 생성하는 방법이 있나요 :
SELECT LEVEL FROM DUAL CONNECT BY LEVEL<=10
해결법
-
==============================
1.이 말을 싫어하지만, MySQL은 단지이 기능이없는 빅 4의 RDBMS입니다.
이 말을 싫어하지만, MySQL은 단지이 기능이없는 빅 4의 RDBMS입니다.
오라클의 경우 :
SELECT * FROM dual CONNECT BY level < n
MS SQL에서 (100 행까지) :
WITH hier(row) AS ( SELECT 1 UNION ALL SELECT row + 1 FROM hier WHERE row < n ) SELECT * FROM hier
또는 32768에 힌트를 사용하여
WITH hier(row) AS ( SELECT 1 UNION ALL SELECT row + 1 FROM hier WHERE row < 32768 ) SELECT * FROM hier OPTION (MAXRECURSION 32767) -- 32767 is the maximum value of the hint
PostgreSQL의에서 :
SELECT * FROM generate_series (1, n)
에서 MySQL은, 아무것도.
-
==============================
2.MySQL은, 내 당신이 어떤 테이블 SELECT (또는 DUAL) 둘 이상의 행을 얻을 수있는 것으로 알고 있습니다.
MySQL은, 내 당신이 어떤 테이블 SELECT (또는 DUAL) 둘 이상의 행을 얻을 수있는 것으로 알고 있습니다.
따라서, 여러 행을 얻으려면, 당신은 행의 최소한 필요한 수와 실제 또는 임시 테이블을 필요합니까.
그러나, 당신은 당신이 필요한 행 적어도 번호가 기존 테이블을 사용할 수있는 임시 테이블을 구축 할 필요가 없습니다. 그래서, 당신은 행의 최소한 필요한 수있는 테이블이있는 경우, 사용 :
SELECT @curRow := @curRow + 1 AS row_number FROM sometable JOIN (SELECT @curRow := 0) r WHERE @curRow<100;
다만 행의 최소 요구 번호 당신의 모든 테이블의 이름으로 "sometable"대체합니다.
추신 : "r은"테이블 "별명"입니다 : 나는 "R 그대로"사용했을 수 있습니다. 또는 FROM A의 모든 하위 쿼리 절은 모든 테이블과 같은 이름이나 별명을 가지고 있어야하는 "파생 테이블"을 만들어 가입하세요. (수동 참조 MySQL의 : 13.2.9.8 FROM 절에서 서브 쿼리.)
-
==============================
3.이 현재 "MySQL의 행 발전기"에 대한 구글의 첫 결과 중 하나이기 때문에, 나는 업데이 트를 추가합니다.
이 현재 "MySQL의 행 발전기"에 대한 구글의 첫 결과 중 하나이기 때문에, 나는 업데이 트를 추가합니다.
MySQL은 당신의 맛 MariaDB를 될 일 경우,이 기능이 있습니다. 그것은 "시퀀스 저장 엔진"이라고하며이 같이 사용되는 :
select * from seq_1_to_10;
결과로 :
+-----+ | seq | +-----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +-----+ 10 rows in set (0.00 sec)
버전 10.0까지 명시 적으로 설치 될 필요가 있음을 별도의 플러그인했지만, 이후 10.0에서이 내장입니다. 즐기십시오!
-
==============================
4.나는 숫자 X가 포함 된 열 (C5)와 테이블을했다, 나는 시간의 같은 행의 X 번호를 되풀이 SQL 식을 필요로했다.
나는 숫자 X가 포함 된 열 (C5)와 테이블을했다, 나는 시간의 같은 행의 X 번호를 되풀이 SQL 식을 필요로했다.
내 테이블 A가 포함 :
c1 c2 c3 c4 c5 16 1 2 16 3 16 1 2 17 2 16 1 2 18 1
그리고 필요 :
c1 c2 c3 c4 c5 n 16 1 2 16 3 1 16 1 2 16 3 2 16 1 2 16 3 3 16 1 2 17 2 1 16 1 2 17 2 2 16 1 2 18 1 1
나는 표현과 그 해결 :
SELECT c1, c2, c3, c4, c5, row_number AS n FROM ( SELECT @curRow := @curRow + 1 AS row_number FROM tablea JOIN (SELECT @curRow := 0) r WHERE @curRow < ( SELECT max(field1) FROM tablea ) ) AS vwtable2 LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;
-
==============================
5.내가 당신을 이해 해요 경우 연속 번호 목록을 줄까?
내가 당신을 이해 해요 경우 연속 번호 목록을 줄까?
그냥 목록을 작성 :
create table artificial_range (id int not null primary key auto_increment, idn int); insert into artificial_range (idn) values (0); --first row insert into artificial_range(idn) select idn from artificial_range; --2nd insert into artificial_range(idn) select idn from artificial_range; -- now 4 rows insert into artificial_range(idn) select idn from artificial_range; --8 insert into artificial_range(idn) select idn from artificial_range; --16 insert into artificial_range(idn) select idn from artificial_range; --32 insert into artificial_range(idn) select idn from artificial_range; --64 insert into artificial_range(idn) select idn from artificial_range; --128
당신이 때까지 ... 등, 1024, 말한다.
update artificial_range set idn = id - 1 ;
- 지금 당신은 1 (ID)를 응시 시리즈를 가지고 일련의 0에서 시작
지금에 가입, 또는 그것의 변형에 가입 :
create view days_this_century as select date_add('2000-01-01', interval a.idn day) as cdate from artificial_range;
-
==============================
6.이 도움이 나도 몰라하지만 당신은 STH 각 select 문에서 행 번호를 수 있습니다. 처럼:
이 도움이 나도 몰라하지만 당신은 STH 각 select 문에서 행 번호를 수 있습니다. 처럼:
그리고 나중에 하나를 가입 할 수 있습니다. 큰 데이터베이스에서이 매우 느려질 수 있습니다.
-
==============================
7.10 개 행을 생성하려면 :
10 개 행을 생성하려면 :
AS SELECT 이중에서 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT UNION ALL SELECT 6 7 8 UNION ALL SELECT UNION ALL SELECT 9
당신은 다른 10 개의 행으로 참여하고 100 개의 행을 생성 할 수 있습니다 :
에서 T2.A * 10 + T1.A을 선택 T1 (a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT UNION ALL SELECT 8 9 0을 선택), T2 (a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT UNION ALL SELECT 8 9 0을 선택)
그리고 서로 후 1000 행이 조인 ...
-
==============================
8., 당신은 할 수 있지만 약간의 비트가 까다로운
, 당신은 할 수 있지만 약간의 비트가 까다로운
여기있어:
mysql> create table t(inc bigint primary key auto_increment); Query OK, 0 rows affected (0.03 sec) mysql> insert into t values(0); Query OK, 1 row affected (0.01 sec) mysql> insert into t select 0 from t; Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> insert into t select 0 from t; Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into t select 0 from t; Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> insert into t select 0 from t; Query OK, 8 rows affected (0.01 sec) Records: 8 Duplicates: 0 Warnings: 0 mysql> select count(inc), max(inc) from t; +------------+----------+ | count(inc) | max(inc) | +------------+----------+ | 16 | 20 | +------------+----------+ 1 row in set (0.00 sec) mysql> select row_number() over w as inc from t window w as (order by inc); +-----+ | inc | +-----+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | +-----+ 16 rows in set (0.00 sec)
당신은 문을 실행하여 생성 된 행의 수를 두배로 할 수있다
insert into t select 0 from t;
만큼 당신이 필요로하는.
또한 기본적으로 그 AUTO_INCREMENT이의 이유 ROW_NUMBER ()를 사용하는 것이 어떤 차이를 발생주의.
from https://stackoverflow.com/questions/701444/how-do-i-make-a-row-generator-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 어떻게 첫 번째 행에 가입하세요 (0) | 2020.03.20 |
---|---|
[SQL] DoCmd.SetWarnings와 CurrentDB.Execute의 차이점은 무엇입니까 (0) | 2020.03.20 |
[SQL] T-SQL 동적 피벗 (0) | 2020.03.20 |
[SQL] 카티 제품을 할 수있는 좋은 LINQ의 방법이 있습니까? (0) | 2020.03.20 |
[SQL] 열 이름으로 다른 값으로 열을 동적 행 값을 선택 MYSQL (0) | 2020.03.20 |