SQL 从一秒开始填写值 Table
SQL Filling In Values From A Second Table
我想出了这个查询来使用子查询从第二个 table 中填充缺失的字段。
我不能修改原来的table
SELECT
CASE WHEN original.target_field IS NULL THEN
(SELECT fill_in.target_field FROM second.table fill_in
WHERE original.id = fill_in.id)
ELSE
original.target_field END AS myField
FROM
primary.table original
我想知道我是否遗漏了什么,是否有更高效的方法来做到这一点?
您可以使用 LEFT JOIN
和 COALESCE
代替相关子查询:
SELECT COALESCE(original.target_field,fill_in.target_field) AS myField
FROM primary.table original
LEFT JOIN second.table fill_in
ON original.id = fill_in.id
测试不同的方法总是值得的。但是您的查询应该可以使用适当的索引。
我会写成:
SELECT (CASE WHEN o.target_field IS NULL
THEN (SELECT f.target_field
FROM second.table f
WHERE o.id = f.id
)
ELSE o.target_field
END) AS myField
FROM primary.table o;
您想要 second.table(id, target_field)
上的索引。 LEFT JOIN
版本需要相同的索引。
我想出了这个查询来使用子查询从第二个 table 中填充缺失的字段。
我不能修改原来的table
SELECT
CASE WHEN original.target_field IS NULL THEN
(SELECT fill_in.target_field FROM second.table fill_in
WHERE original.id = fill_in.id)
ELSE
original.target_field END AS myField
FROM
primary.table original
我想知道我是否遗漏了什么,是否有更高效的方法来做到这一点?
您可以使用 LEFT JOIN
和 COALESCE
代替相关子查询:
SELECT COALESCE(original.target_field,fill_in.target_field) AS myField
FROM primary.table original
LEFT JOIN second.table fill_in
ON original.id = fill_in.id
测试不同的方法总是值得的。但是您的查询应该可以使用适当的索引。
我会写成:
SELECT (CASE WHEN o.target_field IS NULL
THEN (SELECT f.target_field
FROM second.table f
WHERE o.id = f.id
)
ELSE o.target_field
END) AS myField
FROM primary.table o;
您想要 second.table(id, target_field)
上的索引。 LEFT JOIN
版本需要相同的索引。