从列值中选择连接表

时间:2014-02-13 13:51:53

标签: sql join

这里简化了我的数据库结构:

+-----------+    +-----------+    +-------------+
|   data    |    |  int_val  |    | float_val   |
+-----------+    +-----------+    +-------------+
| data_id   |    |  val_id   |    |  val_id     |
|  type     |    |  int_val  |    | float_val   |
| value_ref |    +-----------+    +-------------+
+-----------+

data.value_ref未声明为外键,但它是。我们的想法是使用float_val选择要加入的表格(int_valdata.type column)。

我可以使用一个查询执行此操作吗?

2 个答案:

答案 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'