如何在具有某些链接值但没有相同值的列上连接两个表?
例如,我需要将tbl1
加入tbl2
tbl1.col=100
和tbl2.col=200
。唯一的联系是我/我的公司。
有没有办法在没有显式共享值的情况下链接行?我需要col值为'100'的所有行与所有tbl2列的col值为200的行位于同一行。
答案 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)
如果我正确理解您的问题,您有两个逻辑上相互关联的表,但表中的当前键不会(但您有业务规则将它们放在一起)。我认为您需要创建一个映射该关系的交叉引用表。交叉引用表将每个其他表的主键映射到一起,以显示数据之间的逻辑关系。
我认为所有其他海报都假设这种关系是你可以计算出来的,但我不认为这就是你所要求的。如果我错了,请纠正我。