WHERE 조건 없이 SQL Server의 테이블에서 '첫 번째' 레코드 삭제
의 테이블에서 첫 번째 레코드를 삭제할 수 있습니까?SQL Server
을 사용하지 않고WHERE
조건과 커서를 사용하지 않고?
WITH q AS
(
SELECT TOP 1 *
FROM mytable
/* You may want to add ORDER BY here */
)
DELETE
FROM q
참고:
DELETE TOP (1)
FROM mytable
또한 작동하지만 설명서에 명시된 바와 같이 다음과 같습니다.
에서 참조된 행
TOP
에 사용되는 표현식INSERT
,UPDATE
또는DELETE
순서대로 정렬되지 않았습니다.
그러므로, 사용하는 것이 더 좋습니다.WITH
그리고ORDER BY
절을 사용하면 첫 번째 행으로 간주하는 행을 더 정확히 지정할 수 있습니다.
DBMS에 따라 다릅니다.
-- MYSql:
DELETE FROM table LIMIT 1;
-- Postgres:
DELETE FROM table LIMIT 1;
-- MSSql:
DELETE TOP(1) FROM table;
-- Oracle:
DELETE FROM table WHERE ROWNUM = 1;
아니요, AFAIK, 휴대용으로 하는 것은 불가능합니다.
어쨌든 정의된 "첫 번째" 레코드는 없습니다. 서로 다른 SQL 엔진에서는 다음과 같은 것이 완벽하게 가능합니다.SELECT * FROM table
매번 다른 순서로 결과를 반환할 수 있습니다.
"첫 번째"를 정의하시겠습니까?테이블에 PK가 있으면 PK 순서대로 정렬되며, 이를 통해 삭제할 수 있습니다.
DECLARE @TABLE TABLE
(
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Data NVARCHAR(50) NOT NULL
)
INSERT INTO @TABLE(Data)
SELECT 'Hello' UNION
SELECT 'World'
SET ROWCOUNT 1
DELETE FROM @TABLE
SET ROWCOUNT 0
SELECT * FROM @TABLE
테이블에 PK가 없으면 주문이 보장되지 않습니다.
이게 정말 말이 됩니까?
관계형 데이터베이스에는 "첫 번째" 레코드가 없으므로, 하나의 임의 레코드만 삭제할 수 있습니다.
표에서 '첫 번째' 기록이라니요?관계형 DB에는 "첫 번째 레코드"라는 개념이 없다고 생각합니다.
MS SQL Server 2005를 사용하여 "상위 레코드"(단순한 "*테이블 이름에서 *선택*"을 수행할 때 가장 먼저 표시되는 레코드)를 삭제하려는 경우 "테이블 이름에서 상위(1) 삭제"...를 사용할 수 있습니다. 그러나 이렇게 하면 레코드 집합에서 어떤 행이 삭제되는지 확인할 수 없습니다."select top(1) from table name" 명령을 실행할 경우 표시되는 첫 번째 행이 제거되기 때문입니다.
선택한 답변과 유사하게 테이블 소스를 사용할 수 있습니다. 이 경우 파생 쿼리:
delete from dd
from (
select top 1 *
from my_table
) dd
조건에 따라 자유롭게 주문을 추가할 수 있습니다.
다음 예에서는 'where'에 대한 제한이 값을 기준으로 행을 선택하지 않기 때문이라고 가정합니다.따라서 위치를 기준으로 행을 삭제한다고 가정합니다(이 경우 첫 번째 위치).
delete from dd
from (
select
*,
row = row_number() over (order by (select 1))
from my_table
) dd
where row = 1
(1번 선택)은 테이블 또는 인덱스가 있는 정렬 순서가 됩니다.이를 새 ID로 대체하여 상당히 임의의 행을 가져올 수 있습니다.
예를 들어 에 의해 파티션을 추가하여 각 색상의 맨 위 행을 삭제할 수도 있습니다.
SQL-92:
DELETE Field FROM Table WHERE Field IN (SELECT TOP 1 Field FROM Table ORDER BY Field DESC)
언급URL : https://stackoverflow.com/questions/733668/delete-the-first-record-from-a-table-in-sql-server-without-a-where-condition
'programing' 카테고리의 다른 글
'git submodule'을 사용하여 특정 버전의 서브모듈을 체크아웃하려면 어떻게 해야 합니까? (0) | 2023.06.22 |
---|---|
Git: 분기에 대해 기본적으로 구성된 원격은 무엇입니까? (0) | 2023.06.22 |
SQL Server를 사용하여 일대일 관계 생성 (0) | 2023.06.22 |
사용자 정의 클래스가 있는 힌트 입력 (0) | 2023.06.22 |
ASP.NET 캐시 추가 대 삽입 (0) | 2023.06.22 |