连接2个表,其中table2包含每个table1行的多行

时间:2013-09-11 16:13:05

标签: sql join

要么我过度思考,要么缺乏我的SQL技能。我需要从第二个表向表中添加两列,但值在第二个表中的不同行中。 SQL会做什么?这是一个例子。 transnum 是表格之间的公共列。

TABLE1
------
transnum  id
9287      006
5782      004
5819      001

TABLE2
------
transnum  code  value
9287      A     198.38
9287      B     928.57
9287      C     568.25  -- code C values not needed
5782      A     219.53
5782      B     591.11
5782      C     852.32
5819      A     109.92
5819      B     251.81
5819      C     295.12

DESIRED RESULT
--------------
transnum  id    valueA  valueB
9287      006   198.38  928.57
5782      004   219.53  591.11
5819      001   109.92  251.81

编辑:语法。

2 个答案:

答案 0 :(得分:2)

您可以使用不同的条件两次加入同一个表:

SELECT t1.TransNum, t1.id, t2_A.value "ValueA", t2_B.value "ValueB"
FROM Table1 t1
INNER JOIN Table2 t2_A ON t2_A.transnum = t1.transnum AND t2_A.code = 'A'
INNER JOIN Table2 t2_B ON t2_B.transnum = t1.transnum AND t2_B.code = 'B'

根据您正在做的事情,如果有可能只有其中一个代码的数据,则可能需要使用LEFT JOIN而不是INNER JOIN s。如果这样做,您可能还希望在select子句中的值上使用COALESCE()函数,以便在没有匹配记录时显示除NULL之外的其他内容。

答案 1 :(得分:1)

一种方法是JOIN两次使用非常有限的滤波器:

SELECT t1.transum, t1.id, t2.value AS valueA, t3.value AS valueB
FROM table1 t1
    JOIN table2 t2 ON t2.transum = t1.transum AND t2.code = 'A'
    JOIN table3 t3 ON t3.transum = t1.transum AND t3.code = 'B'