具有重复值的SQL连接

时间:2014-03-17 17:25:10

标签: sql sql-server

我意识到我在上一篇文章中犯了一个错误,这应该更清楚了。

假设我有一张包含ID和当前ID的表:

tbl_id
id   cur_id   value
aa    zz        5
zz    zz        10
bb    yy        2
yy    yy        11

假设我有另一张价格表:

tbl_price
id    price
aa      200
bb      100

我需要返回与cur_id中每个id相关联的tbl_price的价格和价值:

cur_id   value   price
zz        10       200
yy        11       100

我遇到的问题是返回正确的value。当我进行内部联接时:

SELECT
  tbl_id.cur_id,
  tbl_id.value,
  tbl_price.price
FROM
  tbl_price
INNER JOIN tbl_id
  ON tbl_id.id = tbl_price.id

这给了我这些结果:

cur_id   value   price
zz        5       200
yy        2       100

我知道为什么会发生这种情况,因为联接的工作方式。但是,我不知道如何再次重新加入该表格以获得value tbl_id.id = tbl_id.cur_id所在的{{1}}。我是否只是再次重新加入桌面?

2 个答案:

答案 0 :(得分:2)

您还需要一个自我加入才能获得所需的结果:

SELECT
  i1.cur_id,
  i2.value,
  p.price
FROM
  tbl_price p
INNER JOIN tbl_id i1 ON i1.id = p.id
INNER JOIN tbl_id i2 ON i1.cur_id = i2.id

我们的想法是再次加入ID表,并从第二次加入中获取一次性ID。

Demo on SQLFiddle.

答案 1 :(得分:0)

尝试添加where语句:

INNER JOIN tbl_id
  ON tbl_id.id = tbl_price.id 
  WHERE tbl_id.id = tbl_id.cur_id