这里简化了我的数据库结构:
+-----------+ +-----------+ +-------------+
| data | | int_val | | float_val |
+-----------+ +-----------+ +-------------+
| data_id | | val_id | | val_id |
| type | | int_val | | float_val |
| value_ref | +-----------+ +-------------+
+-----------+
data.value_ref
未声明为外键,但它是。我们的想法是使用float_val
选择要加入的表格(int_val
或data.type column
)。
我可以使用一个查询执行此操作吗?
答案 0 :(得分:1)
是的,您可以使用外部联接和CASE WHEN:
执行此操作select
case when type = 'int'
then int_val.int_val
else float_val.float_val
end
from
data
left join int_val on data.value_ref=val_id
left join float_val on data.value_ref=val_id
这假设value_ref将存在于int_val或float_val中,但不能同时存在于两者中。
答案 1 :(得分:0)
SELECT
data.id,
COALESCE(CAST(int_val.int_val AS FLOAT), float_val.float_val) AS value
FROM data
LEFT JOIN int_val
ON int_val.val_id = data.value_ref
AND data.type = 'int'
LEFT JOIN float_val
ON float_val.val_id = data.value_ref
AND data.type = 'float'