这显然会导致:
SELECT *, uuid_generate_v4() FROM fruits;
apple |f6b9a8a5-31c9-4917-9649-f366b7c12492
orange |a55da08f-95a0-4f33-b536-866a3eae71e9
我知道我能做到
SELECT * FROM fruits LEFT OUTER JOIN uuid_generate_v4() ON TRUE;
但是有没有更好的方法来分配相同的 uuid?我最感兴趣的是概念层面,uuid() 函数只是一个例子。
所以你要确保
uuid_generate_v4()
它只被调用一次。您的解决方案本质上就是这样做的。其他解决方案仅在使用的语法上有所不同。
您可以使用公用表表达式以某种方式在您的查询中表达它:
由于 CTE 仅返回一行,因此交叉连接不会增加完整结果中的行数。或者,您可以使用“隐式”交叉连接来缩短它:
或者您可以删除 CTE 并在派生表中使用函数调用: