在具有不同(但已连接)值的列上连接两个表

时间:2012-10-26 20:29:46

标签: sql

如何在具有某些链接值但没有相同值的列上连接两个表?

例如,我需要将tbl1加入tbl2 tbl1.col=100tbl2.col=200。唯一的联系是我/我的公司。

有没有办法在没有显式共享值的情况下链接行?我需要col值为'100'的所有行与所有tbl2列的col值为200的行位于同一行。

4 个答案:

答案 0 :(得分:3)

您可以在连接谓词中加入一些逻辑,如:

select *
from tbl1 as a
    join tbl2 as b on a.col + 100 = b.col

答案 1 :(得分:2)

select
  *
from
  tbl1
    inner join
  tbl2
    on tbl1.col = 100 and tbl2.col = 200
很奇怪,但它会起作用

答案 2 :(得分:2)

  

有没有办法在没有显式共享值的情况下链接行?

即可。您可以编写自定义JOIN来自行关联数据。

您没有指定特定的DBMS,因此以下示例包含通用SQL。

SELECT * FROM tbl1, tbl2 WHERE tbl1.col = 100 AND tbl12.col = 200

或者,更动态:

SELECT * FROM tbl1, tbl2 WHERE tbl1.col + 100 = tbl12.col;
-- with JOIN
SELECT * FROM tbl1 JOIN tbl2 ON (tbl1.col + 100) = tbl12.col;

答案 3 :(得分:1)

如果我正确理解您的问题,您有两个逻辑上相互关联的表,但表中的当前键不会(但您有业务规则将它们放在一起)。我认为您需要创建一个映射该关系的交叉引用表。交叉引用表将每个其他表的主键映射到一起,以显示数据之间的逻辑关系。

我认为所有其他海报都假设这种关系是你可以计算出来的,但我不认为这就是你所要求的。如果我错了,请纠正我。