相关疑难解决方法(0)

我如何(或可以)在多列上选择DISTINCT?

我需要检索表中的所有行,其中2列组合都是不同的.因此,我希望所有在同一天没有任何其他销售的销售以相同的价格出售.基于日期和价格的唯一销售将更新为活动状态.

所以我在想:

UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
             FROM sales
             HAVING count = 1)
Run Code Online (Sandbox Code Playgroud)

但是我的大脑比那更远了.

sql postgresql distinct duplicates sql-update

382
推荐指数
4
解决办法
86万
查看次数

使用空列创建唯一约束

我有一个这种布局的表:

CREATE TABLE Favorites
(
  FavoriteId uuid NOT NULL PRIMARY KEY,
  UserId uuid NOT NULL,
  RecipeId uuid NOT NULL,
  MenuId uuid
)
Run Code Online (Sandbox Code Playgroud)

我想创建一个类似于此的唯一约束:

ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);
Run Code Online (Sandbox Code Playgroud)

但是,这将允许多行具有相同的(UserId, RecipeId)if MenuId IS NULL.我想允许NULLMenuId存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个.

我到目前为止的想法是:

  1. 使用一些硬编码的UUID(例如全零)而不是null.
    但是,MenuId每个用户的菜单都有一个FK约束,所以我必须为每个用户创建一个特殊的"空"菜单,这是一个麻烦.

  2. 使用触发器检查是否存在空条目.
    我认为这是一个麻烦,我喜欢尽可能避免触发器.另外,我不相信他们能保证我的数据永远不会处于不良状态.

  3. 只需忘记它并检查中间件或插入函数中是否存在空条目,并且没有此约束.

我正在使用Postgres 9.0.

我有什么方法可以忽略吗?

sql postgresql null database-design referential-integrity

219
推荐指数
2
解决办法
8万
查看次数

如何删除重复的条目?

我必须为现有表添加唯一约束.这很好,除了表已经有数百万行,并且许多行违反了我需要添加的唯一约束.

删除有问题的行的最快方法是什么?我有一个SQL语句,它找到重复项并删除它们,但它需要永远运行.有没有其他方法可以解决这个问题?也许备份表,然后在添加约束后恢复?

sql postgresql duplicate-removal unique-constraint sql-delete

93
推荐指数
7
解决办法
9万
查看次数

如何删除没有唯一标识符的重复行

我的表中有重复的行,我想以最有效的方式删除重复项,因为表很大.经过一番研究,我得出了这个问题:

WITH TempEmp AS
(
SELECT name, ROW_NUMBER() OVER(PARTITION by name, address, zipcode ORDER BY name) AS duplicateRecCount
FROM mytable
)
-- Now Delete Duplicate Records
DELETE FROM TempEmp
WHERE duplicateRecCount > 1;
Run Code Online (Sandbox Code Playgroud)

但它只适用于SQL,而不适用于Netezza.它似乎不喜欢DELETE后面的WITH条款?

sql database postgresql duplicates netezza

41
推荐指数
5
解决办法
5万
查看次数

合并具有多个参考的用户并计算他们的集体资产

有一组用户。一个人可以拥有多个用户,但ref1ref2可能相似,因此可以将用户链接在一起。ref1ref2不重叠,则 中ref1不存在 中的一个值ref2

一个用户可以拥有多种资产。我想“合并”具有一个或多个相似参考的用户,然后计算他们总共拥有多少资产。用户表中可能缺少条目,在这种情况下,我只想将所有者传播到 ref2 并设置 asset_count 和 asset_ids。

下面是一个示例架构来说明:

示例资产

SELECT * FROM assets;
Run Code Online (Sandbox Code Playgroud)
ID 姓名 所有者
1 #1 A
2 #2
3 #3 C
4 #4 A
5 #5 C
6 #6 d
7 #7 e
8 #8 d
9 #9 A
10 #10 A
11 #11 z

用户示例

SELECT * FROM users;
Run Code Online (Sandbox Code Playgroud)
ID 用户名 参考1 参考2
1 波波 A d
2 托托 e …

sql arrays postgresql graph-theory aggregate-functions

12
推荐指数
1
解决办法
440
查看次数

在 postgres 中使用 Union 联合两个表创建一个新表

我想创建一个新表作为两个没有重复表的并集的结果。我在 stackoverflow 中搜索,发现了一个问题,正是我想要的,但使用 mysql Create a new table from merging两个表与联合

mysql中的解决方案

CREATE TABLE new_table
  SELECT * FROM table1
    UNION
  SELECT * FROM table2;
Run Code Online (Sandbox Code Playgroud)

我尝试做类似的事情,但我得到了:

SQL 错误。

如果可以使用类似于 mysql 的语句来实现这一点,我想实现这一点。

我知道,如果您首先使用我想要的字段创建一个新表。我可以通过该表的并集对该表进行选择。如果没有其他选择,我必须做这样的事情。

但总而言之,如果可能的话,可以在 postgres 中使用 mysql 做类似的事情。我想使用语法糖来做到这一点

提前致谢

更新

为了澄清我有两个具有相同结构的表

TABLE1(id,field1,field2,field3)
TABLE2(id,field1,field2,field3)
Run Code Online (Sandbox Code Playgroud)

和我想要的桌子

TABLE3(id,field1,field2,field3)
Run Code Online (Sandbox Code Playgroud)

请注意,我尝试过

CREATE TABLE new_table as
  SELECT * FROM table1
    UNION
  SELECT * FROM table2;
Run Code Online (Sandbox Code Playgroud)

它可以工作,但没有将字段放在正确的位置,例如将表 1 的 field3 放在 table_result 的字段 1 中

postgresql union create-table

4
推荐指数
1
解决办法
1万
查看次数

PostgreSQL 删除没有 id 或 unique_key 的重复项

我想知道如何删除表中完全重复的行并只保留一个。例如这张桌子。

在此处输入图片说明

在此处输入图片说明

我读过的大多数线程都已使用idunique_key在这种情况下我没有使用。

编辑:当我说remove我的意思delete是表中的那些记录时,我又没有 id 来引用以创建条件以保留一条记录。对困惑感到抱歉。

先感谢您。

这可能是与其他线程相同的问题。但是,他们未能解释 fa06 成功提供的 ctid 是什么。所以,我会说我问的是使用相同的词但不同的问题。请删除“标记重复”。谢谢。

postgresql duplicates sql-delete

1
推荐指数
1
解决办法
1963
查看次数