이 예제에서 성명서는 무엇입니까? 데이터를 무작위로 생성하려고합니다
-
06-07-2019 - |
문제
INSERT INTO files (fileUID, filename)
WITH fileUIDS(fileUID) AS
( VALUES(1) UNION ALL
SELECT fileUID+1 FROM fileUIDS WHERE fileUID < 1000 )
SELECT fileUID,
TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefgHij', '1234567890' )
FROM fileUIDS;
해결책
With Syntax는 로컬 온도 테이블 또는 인라인보기를 사용하는 것과 동일합니다. 내 아는 한, 그것은 SQL Server (2005+, Common Table Expressions) 및 Oracle (9i+, 서브 쿼리 팩터링)에서만 지원됩니다. 의도 된 용도는 단일 쿼리에서 사용되는 기본보기 (예 : 조인)를 여러 번 생성하는 것입니다.
다음은 일반적인 예입니다.
WITH example AS (
SELECT q.question_id,
t.tag_name
FROM QUESTIONS q
JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
JOIN TAGS t ON t.tag_id = qtf.tag_id)
SELECT t.title,
e1.tag_name
FROM QUESTIONS t
JOIN example e1 ON e1.question_id = t.question_id
... 사용하면 동일한 결과를 반환합니다.
SELECT t.title,
e1.tag_name
FROM QUESTIONS t
JOIN (SELECT q.question_id,
t.tag_name
FROM QUESTIONS q
JOIN QUESTION_TAG_XREF qtf ON qtf.question_id = t.question_id
JOIN TAGS t ON t.tag_id = qtf.tag_id) e1 ON e1.question_id = t.question_id
제공 한 예 :
WITH fileUIDS(fileUID) AS (
VALUES(1)
UNION ALL
SELECT t.fileUID+1
FROM fileUIDS t
WHERE t.fileUID < 1000 )
INSERT INTO files
(fileUID, filename)
SELECT f.fileUID,
TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefgHij', '1234567890' )
FROM fileUIDS f;
... 재귀적인 것입니다. 그것은 1에서 시작하여 총 999 개의 파일 우드를 생성합니다 (0에서 시작한 경우 1,000이 될 것입니다).
다른 팁
WITH x AS (...)
이것은 출력을 취할 것입니다 ...
그리고 그것을 명명 된 테이블로 취급하십시오 x
, 일시적으로.
WITH x AS (...)
SELECT * FROM x
이 진술은 본질적으로 당신에게 ...
출력이지만 대신 테이블로 참조됩니다. x
With Word는 공통 테이블 표현식 (CTE)을 만드는 데 사용됩니다. 이 경우 "Select FileUid, ..."부분이 데이터를 가져 오는 인라인 테이블을 생성합니다.
CTE (공통 테이블 표현)를 생성하고 있습니다. 이것은 기본적으로 어쨌든 생성, 삭제 또는 선언 할 필요가없는 테이블입니다. 배치가 실행 된 후 자동으로 삭제됩니다.
체크 아웃 http://4guysfromrolla.com/webtech/071906-1.shtml 더 많은 정보를 위해서.
제휴하지 않습니다 StackOverflow