mariadb Sql 2主键删除其中1个主键重复的行

1rhkuytd  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个SQL表(mariaDB)与2主键。我想删除的第一个主键是重复的行。(是的,我知道主键不能重复,但与2主键,他们像一个touple工作,所以这是可能的,但在我的情况下不想要的)例子:
| 识别号(峰)|名称(pk)|史密斯|其他|
| - ------|- ------|- ------|- ------|
| 1个|项目a|1234|标准键盘|
| 1个|B|小行星4567|阿斯夫|
我想删除第二行,因为id键重复。
已尝试:几乎任何删除查询,其行数为我上次尝试的查询的行数:

WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS RN
FROM product_names
)

DELETE FROM CTE WHERE RN<>1
guz6ccqo

guz6ccqo1#

为了澄清定义,表中不能有两个主键,但表的主键由两列组成。
要改进架构,您可能需要更改表,以便主键仅基于第一列。但是,根据数据库引擎的不同,保留组合键可能会很有用。这样可以加快仅从主键检索第二列的查询速度。在这种情况下,您可能需要向主键的第一列添加唯一子句。
要清理你的u表,你可以使用它,但是要注意它没有第二列的过滤器,这意味着任何具有相同id的列都可以根据它的顺序被删除。

WITH duplicated AS (
    SELECT id, name, row_number() OVER (PARTITION BY a) row_number
    FROM product_names
    ORDER BY name
)
DELETE FROM product_names
WHERE (a, b) IN (SELECT a, b FROM duplicated WHERE row_number > 1);

相关问题