来自不同表的条件连接

时间:2016-01-11 05:34:17

标签: sql postgresql

我有一张看起来像的桌子 Items

id   index
1     45
1     50
2     25
2     45

我正在写一个查询 从items中选择所有行。我需要用它的描述替换索引。 Id 1表示table_a,id 2表示table_b。

表-A

index   description
45          'ddd'
50          'fff'

表-B

index   description
25          'AAA'
45          'BBB'

意思是我需要加入索引,但取决于id。

类似的东西:

Select id,index,description
from items
join table_A,table_B using (index)

我想得到的是:

id index description

1    45    'ddd'
1    50    'fff'
2    25    'AAA'
2    45    'BBB'

如何通过1加入来做到这一点?

3 个答案:

答案 0 :(得分:2)

你需要UNION Table_A&首先是Table_B,然后使用Items连接如下

Select id,index,T.description from items
join (select 1 as id, index, description from Table_A 
UNION select 2 as id, index, description from Table_B) as T
ON items.id=T.id and items.index=T.index

答案 1 :(得分:1)

假设UNION不算作连接,那么:

SELECT i.id, i.index, u.description
  FROM Items AS i
  JOIN (SELECT 1 AS id, index, description FROM Table_A
        UNION
        SELECT 2 AS id, index, description FROM Table_B
       ) AS u
    ON u.id = i.id AND i.index = u.index;

答案 2 :(得分:0)

您可以在不使用单个连接语句的情况下执行此操作。

select a.id_,a.indx, decode(a.id_,1,(select description from table_a where indx=a.indx), 2,(select description from table_b where indx=a.indx)) description from item a

它将提供所需的输出。但我认为indx=a.indx将充当反连接(隐式连接的类型)。

在解码中的每次迭代中,如何只执行一个select语句。 所以一次只能加入一个。

如果我错了,请告诉我。