如何在具有某些链接值但不具有相同值的列上连接两个表?
例如,我需要tbl1
加入tbl2
wheretbl1.col=100
和tbl2.col=200
. 唯一的联系是我/我的公司。
有没有办法在没有明确共享值的情况下链接行?我需要 col 值为 '100' 的所有行位于同一行,因为所有 tbl2 列的 col 值为 200。
如何在具有某些链接值但不具有相同值的列上连接两个表?
例如,我需要tbl1
加入tbl2
wheretbl1.col=100
和tbl2.col=200
. 唯一的联系是我/我的公司。
有没有办法在没有明确共享值的情况下链接行?我需要 col 值为 '100' 的所有行位于同一行,因为所有 tbl2 列的 col 值为 200。
您可以在连接谓词中添加一些逻辑,如下所示:
select *
from tbl1 as a
join tbl2 as b on a.col + 100 = b.col
select
*
from
tbl1
inner join
tbl2
on tbl1.col = 100 and tbl2.col = 200
奇怪,但它会工作
有没有办法在没有明确共享值的情况下链接行?
是的。您可以编写一个自定义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;
如果我正确理解您的问题,您有两个在逻辑上相互关联的表,但表中的当前键没有(但您有将它们放在一起的业务规则)。我认为您需要创建一个映射该关系的交叉引用表。交叉引用表会将其他表的主键映射在一起,以显示数据之间的逻辑关系。
我认为所有其他海报都假设这种关系是你可以计算的,但我认为这不是你要问的。如我错了请纠正我。