【发布时间】:2018-05-02 13:53:41
【问题描述】:
我想使用从一组可能值中随机选择的值来更新行。
理想情况下,我可以在运行时使用 Java 应用程序中的 JdbcTemplate 提供这些值。
示例: 在表中,“名称”列可以包含任何名称。目标是遍历表并将所有名称更改为等于“Bob”或“Alice”。
我知道这可以通过创建一个 sql 函数来完成。我测试了它,它很好,但我想知道是否可以只使用简单的查询?
这行不通,似乎该值只计算一次,并应用于所有行:
UPDATE test.table
SET first_name =
(SELECT a.name
FROM
(SELECT a.name, RAND() idx
FROM (VALUES('Alice'), ('Bob')) AS a(name) ORDER BY idx FETCH FIRST 1 ROW ONLY) as a)
;
我尝试使用MERGE INTO,但它甚至无法运行(在SET 查询中找不到possible_names)。我还没有弄清楚为什么:
MERGE INTO test.table
USING
(SELECT
names.fname
FROM
(VALUES('Alice'), ('Bob'), ('Rob')) AS names(fname)) AS possible_names
ON ( test.table.first_name IS NOT NULL )
WHEN MATCHED THEN
UPDATE SET
-- select random name
first_name = (SELECT fname FROM possible_names ORDER BY idx FETCH FIRST 1 ROW ONLY)
;
编辑:如果可能,我只想关注正在更新的字段,而不是依赖于知道主键等。
【问题讨论】:
标签: sql jdbc db2 jdbctemplate