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