分组时如何使 postgres db 中的列为空使这成为分组中的最高行
How can I null columns in postgres db when grouping makes this the hihghes t row in grouping
这个table代表音乐曲目上的艺术家,位置指定艺术家的顺序,join_relation 指定要在艺术家之间插入的文本,例如“&”或“,”以创建 artistcredit
table "tracks_artists"
Column | Type | Modifiers
---------------+---------+-----------
track_id | text | not null
position | integer | not null
name | text |
join_relation | text |
所以如果我们在名称中有这些行
track_id | position | name | join_relation
--------------------------------------------------------------------+--------------
f559fe60-cf21-4019-9395-7bdde3256be1 | 1 | Elec3 | &
f559fe60-cf21-4019-9395-7bdde3256be1 | 2 | Psynina |
艺术家信用将是 Elec3 & Pysnina
但在某些情况下,由于导入数据无效,我们对所有行的连接关系都有一个值
track_id | position | name | join_relation
--------------------------------------------------------------------+--------------
f559fe60-cf21-4019-9395-7bdde3256be1 | 1 | Elec3 | &
f559fe60-cf21-4019-9395-7bdde3256be1 | 2 | Psynina | ,
也就是说,这会给 Elec3 和 Pysnina,
但这是错误的,因为排名最高的艺术家不应该有 join_relation 列的值
我该如何解决这个 table 以便任何曲目的最高级别艺术家将 relation_join 设置为空。如果更容易的话,我不介意分多个阶段进行。
我正在使用 Postgres 9.3.5
更新
根据下面的答案分成几个阶段,首先找到问题行
create temp table badjoins as
select t1.* from tracks_artists t1
where
( t1.join_relation is not null AND t1.join_relation!='')
AND NOT EXISTS
(
SELECT 1 FROM tracks_artists t2 WHERE t1.track_id = t2.track_id
AND t2.position > t1.position
);
也许是这个?
UPDATE tracks_artists t1 SET join_relation = NULL WHERE NOT EXISTS (SELECT 1 FROM track_artists t2 WHERE t1.track_id = t2.track_id AND t2.position > t1.position)
这个table代表音乐曲目上的艺术家,位置指定艺术家的顺序,join_relation 指定要在艺术家之间插入的文本,例如“&”或“,”以创建 artistcredit
table "tracks_artists"
Column | Type | Modifiers
---------------+---------+-----------
track_id | text | not null
position | integer | not null
name | text |
join_relation | text |
所以如果我们在名称中有这些行
track_id | position | name | join_relation
--------------------------------------------------------------------+--------------
f559fe60-cf21-4019-9395-7bdde3256be1 | 1 | Elec3 | &
f559fe60-cf21-4019-9395-7bdde3256be1 | 2 | Psynina |
艺术家信用将是 Elec3 & Pysnina
但在某些情况下,由于导入数据无效,我们对所有行的连接关系都有一个值
track_id | position | name | join_relation
--------------------------------------------------------------------+--------------
f559fe60-cf21-4019-9395-7bdde3256be1 | 1 | Elec3 | &
f559fe60-cf21-4019-9395-7bdde3256be1 | 2 | Psynina | ,
也就是说,这会给 Elec3 和 Pysnina,
但这是错误的,因为排名最高的艺术家不应该有 join_relation 列的值
我该如何解决这个 table 以便任何曲目的最高级别艺术家将 relation_join 设置为空。如果更容易的话,我不介意分多个阶段进行。
我正在使用 Postgres 9.3.5
更新 根据下面的答案分成几个阶段,首先找到问题行
create temp table badjoins as
select t1.* from tracks_artists t1
where
( t1.join_relation is not null AND t1.join_relation!='')
AND NOT EXISTS
(
SELECT 1 FROM tracks_artists t2 WHERE t1.track_id = t2.track_id
AND t2.position > t1.position
);
也许是这个?
UPDATE tracks_artists t1 SET join_relation = NULL WHERE NOT EXISTS (SELECT 1 FROM track_artists t2 WHERE t1.track_id = t2.track_id AND t2.position > t1.position)