我有一个包含多个记录可以共享的fieldA的表。
我有另一个字段,值。
我有第三个字段,GroupLeaderFlag,该标记基于一些先前的关系,记录共享fieldA是该组中的核心记录,因此我可以进一步与它们之间的值和其他字段进行比较。
在某些情况下,我无法根据先前的关系标记给定组的GroupLeaderFlag。
因此,我希望使用以下规则执行标记GroupLeaderFlag的辅助过程:
更新: 我意识到我有另一个字段GroupLeaderName,其中对于每个fieldA组,我将为该组确定/标记的记录的名称/ ID存储为GroupLeaderFlag,以便我在组中的每个记录中都有该名称/ ID。
因此,这成为另一个分组的字段,以获取没有以GroupLeader结尾的fieldA组。
我成功运行了Select,但无法将其转换为更新:
Select fieldA,Name,Min(Value),'X'
as GroupLeaderFlag from TableA
where GroupLeaderName is NULL
group by fieldA
所以基本上我需要把它变成一个Update,这样我从select中获得的输出就是fieldA组中记录的名称,该组没有GroupLeaderFlag,该组中的最低值以及带有临时字段的价值' X'进入更新。
更新:我发现每个fieldA组按值asc自然排序,这使我无需提取每个组的最低值。所以我这样做了:
Update TableA as T1
Inner Join
(Select ID,GroupLeaderFlag from TableA
group by fieldA having Count(GroupLeaderFlag )=0) as T2
On T1.ID=T2.ID set T1.GroupLeaderFlag ='X'
答案 0 :(得分:0)
假设
Name
是唯一的(或至少在同一fieldA
内)'X'
(查看您的示例)或''
(空字符串) - 但我更喜欢0
或1
值此查询将返回新组长的名称:
SELECT
fieldA,
(SELECT Name FROM MyTable s
WHERE s.fieldA = n.fieldA
ORDER BY `Value` LIMIT 1) AS `Name`
FROM MyTable n
GROUP BY fieldA
HAVING MAX(GroupLeaderFlag) = ''
将UPDATE
中的内容合并到
UPDATE MyTable u
JOIN (
SELECT
fieldA,
(SELECT Name FROM MyTable s
WHERE s.fieldA = n.fieldA
ORDER BY `Value` LIMIT 1) AS `Name`
FROM MyTable n
GROUP BY fieldA
HAVING MAX(GroupLeaderFlag) = ''
) AS f USING (fieldA)
SET GroupLeaderFlag = IF(u.`Name` = f.`Name`, 'X', ''),
GroupLeaderName = f.`Name`;