programing

WHERE 조건 없이 SQL Server의 테이블에서 '첫 번째' 레코드 삭제

powerit 2023. 6. 22. 22:33
반응형

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

반응형