programing

동일한 열 값을 가진 특정 행을 mysql 테이블에서 삭제하려면 어떻게 해야 합니까?

itsource 2022. 11. 3. 22:06
반응형

동일한 열 값을 가진 특정 행을 mysql 테이블에서 삭제하려면 어떻게 해야 합니까?

MySQL 쿼리에 문제가 있습니다.테이블에는 4개의 열이 있으며 다음과 같습니다.

id_users    id_product    quantity    date
 1              2              1       2013
 1              2              1       2013
 2              2              1       2013
 1              3              1       2013

id_users그리고.id_product다른 테이블의 외부 키입니다.

원하는 것은 한 줄만 삭제하는 것입니다.

1     2     1    2013

두 번 뜨니까 삭제하고 싶어요.

이 질문을 해봤습니다.

delete from orders where id_users = 1 and id_product = 2

그러나 둘 다 삭제됩니다(복제되어 있기 때문에).이 문제를 해결할 힌트가 있나요?

를 추가합니다.limit삭제 쿼리로

delete from orders 
where id_users = 1 and id_product = 2
limit 1

모든 테이블에는 기본 키(1개 또는 여러 개의 열로 구성됨)가 있어야 합니다. 중복 행은 관계형 데이터베이스에서 의미가 없습니다.다음을 사용하여 삭제 행 수를 제한할 수 있습니다.LIMIT단,

DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1

다만, 이것으로 현재의 문제를 해결할 수 있습니다.프라이머리 키를 정의해, 보다 큰 문제에 임할 필요가 있습니다.

삭제할 행 수를 지정해야 합니다.고객님의 경우(및 고객님은 1개만 보관하고 싶을 것으로 생각됩니다) 다음과 같이 할 수 있습니다.

DELETE FROM your_table WHERE id_users=1 AND id_product=2
LIMIT (SELECT COUNT(*)-1 FROM your_table WHERE id_users=1 AND id_product=2)

테이블을 설계하는 가장 좋은 방법은 1개의 임시 행을 자동 증분으로 추가하고 기본 키로 유지하는 것입니다.그래서 우리는 위와 같은 문제를 피할 수 있다.

행 삭제에 대한 답변이 이미 있습니다.LIMIT테이블에는 프라이머리 키가 있는 것이 이상적입니다.만약 없다면.

다른 방법을 제시하겠습니다.

  1. 고유 인덱스 작성

이 예에서는 id_users와 id_product가 고유해야 합니다.

ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)

그러면 데이터가 동일한 중복 행이 삭제됩니다.

그래도 오류가 발생하면 IGNORE 절을 사용하더라도 다음을 시도해 보십시오.

ALTER TABLE orders ENGINE MyISAM;
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
ALTER TABLE orders ENGINE InnoDB; 
  1. 테이블을 다시 작성함으로써

값이 중복된 행이 여러 개 있는 경우 테이블을 다시 생성할 수도 있습니다.

RENAME TABLE `orders` TO `orders2`;

CREATE TABLE `orders` 
SELECT * FROM `orders2` GROUP BY id_users, id_product;

각 행에 대해 자동 증분 ID를 추가해야 하며, 그 후 해당 ID를 기준으로 행을 삭제할 수 있습니다.따라서 테이블은 각 행에 대해 하나의 ID를 가지며 id_user, id_product ecc...

언급URL : https://stackoverflow.com/questions/18378190/how-to-delete-a-certain-row-from-mysql-table-with-same-column-values

반응형