大家好!
我有一个看起来有点像这样的数据库表(为了清楚起见,去掉了):
customer
====================
name | track
====================
John | one
Sue | two
Greg | one
Loreen | three
Niles | two
现在,我想通过我的 select 语句为每个独特的轨道生成一种新颜色,例如:
SELECT name, track, ('#' || HEX(RANDOMBLOB(3))) AS color
FROM customer;
不幸的是,我无法修改表格内容或数据库结构,因此,我不得不动态生成颜色。上面的SELECT
查询产生如下内容:
name | track | color
====================================
John | one | #000000
Sue | two | #444444
Greg | one | #888888
Loreen | three | #CCCCCC
Niles | two | #FFFFFF
即每行的新颜色。但这不是我想要的!我希望所有独特的曲目保持相同的颜色,如下所示:
name | track | color
====================================
John | one | #000000
Sue | two | #444444
Greg | one | #000000
Loreen | three | #888888
Niles | two | #444444
即所有“一个”轨道都应该有“#000000”颜色,所有“两个”轨道应该有“#444444”颜色等等。
如前所述,我没有更改数据库的奢侈,我只能查询它。另外:它是在 Android 设备上运行的 SQLite 数据库,所以我也负担不起那些毛茸茸的服务器端查询。
到目前为止我的努力:
到目前为止,我提出了以下查询:
SELECT a.name, a.track, b.color
FROM 'customer' AS a
LEFT JOIN (
SELECT track, ('#' || HEX(RANDOMBLOB(3))) AS color
FROM 'customer'
GROUP BY track) AS b
ON (b.track == a.track);
但这个问题与我在技术上被允许做的事情以及我在架构上愿意做的事情接壤。以明确定义的方式进行此类查询所需的代码库更改几乎比它的结果更昂贵。
那么,各位建筑师,你们怎么说?我怎样才能尽可能有效地做到这一点?