从同一个表中选择具有多个字段的内部联接

时间:2014-02-11 14:31:23

标签: sql

我目前在我的数据库中有两个表,一个用于值(使用外键),另一个用于翻译(同一个表具有多种属性类型的翻译)。

我正在尝试从Values表到Translations表执行单个内连接,并翻译两个或多个字段。

我知道这是一个糟糕的数据库设计,但此数据库仅用于生成不会更改的单个报告*


翻译表

**id, attribute, value, name**
  1 , office   , 2    , office1
  2 ,  office  , 3    , office2
  3 ,  office  , 4    , office3
  4 ,  office  , 5    , office4
  5 ,  segment , 31   , segment1
  6 ,  segment , 32   , segment2
  7 ,  segment , 33   , segment3
  8 ,  segment , 34   , segment4

值表

**office, segment, sum**
  2     , 31     , 1234
  3     , 31     , 4321
  5     , 34     , 9813
  2     , 33     , 8371

结果应该是这样的:

结果表

**office  , segment  , sum**
  office1 , segment1 , 1234
  office2 , segment1 , 4321
  office4 , segment4 , 9813
  office1 , segment3 , 8371

有可能吗?如果有,怎么样?

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以通过两次加入translation表来执行此操作:

SELECT toff.name as office, tseg.name as segment, v.`sum`
from values v join
     translation toff
     on v.office = toff.value and toff.attribute = 'office' join
     translation tseg
     on v.segment = tseg.value and tseg.attribute = 'segment';

我认为属性名称对于匹配目的很重要。

答案 1 :(得分:0)

您希望通过Translation表格将Values表格加入自身:

SELECT o.name office, s.name segment, v.sum
FROM Translation o
INNER JOIN Values v ON o.value = v.office
INNER JOIN Translation s on v.segment = s.value

答案 2 :(得分:0)

这应该是:

SELECT t.name
      ,t.attribute
      ,v.sum
  FROM translation t
      ,VALUES      v
 WHERE t.value = v.office