我有一个包含三列的表,
foo_id | bar_id | is_primary
现在导入了大量的记录后,id对都在,但is_primary
到处都是0,我需要为每个foo_id
分配1个任意行,is_primary
= 1?
foo_id | bar_id是主要唯一键,但foo_id和bar_id都可以多次出现
答案 0 :(得分:1)
假设所有(foo_id, bar_id)
对都是唯一的,is_primary
被限制为0或1(即没有其他值或NULL),您可以确定,例如,最小bar_id
每个foo_id
值的值,并为相应的行设置is_primary
为1:
UPDATE atable t
INNER JOIN (
SELECT
foo_id,
MIN(bar_id) AS bar_id
FROM atable
GROUP BY foo_id
HAVING MAX(is_primary) = 0
) s ON t.foo_id = s.foo_id AND t.bar_id = s.bar_id
SET t.is_primary = 1
答案 1 :(得分:0)
假设(foo_id,bar_id)
是唯一的,您可以使用not exists
子句过滤每bar_id
foo_id
的最高值:
update YourTable yt1
set is_primary = 1
where not exists
(
select *
from YourTable yt2
where yt2.foo_id = yt1.foo_id
and yt2.bar_id > yt1.bar_id
)