如何使用来自另一个 table 的值更新 PostgreSQL 上的多个列
How to update multiple columns on PostgreSQL with values from another table
我有以下更新声明:
UPDATE users u
SET last_login=(
SELECT created_on
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
)
但是..如果我有更多的值需要更新怎么办?我需要:
UPDATE users u
SET last_login=(
SELECT created_on
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
),
last_ip=(
SELECT ip
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
)
这看起来很贵。但是找不到任何其他方法。
一种方法是在单个表达式中更新两列:
UPDATE users u
SET (last_login, last_ip) = (
SELECT created_on, ip
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1)
我有以下更新声明:
UPDATE users u
SET last_login=(
SELECT created_on
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
)
但是..如果我有更多的值需要更新怎么办?我需要:
UPDATE users u
SET last_login=(
SELECT created_on
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
),
last_ip=(
SELECT ip
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1
)
这看起来很贵。但是找不到任何其他方法。
一种方法是在单个表达式中更新两列:
UPDATE users u
SET (last_login, last_ip) = (
SELECT created_on, ip
FROM user_login_log log
WHERE log.user_id = u.id
ORDER BY log.created_on DESC
LIMIT 1)