将两个 table 连接在一起并使用第三个 table 包含来自两者的复合键?

Join two tables together with the use of a third table that contains composite keys from both?

我正在尝试将两个 table 与第三个 table 组合在一起,第三个由单个列组成,该列是两个 table 主键列的组合。我考虑过使用子字符串将列分隔成可以与 table 的键列进行比较的部分,但我可能会使它变得更加困难。

您可以使用带有 LIKE 运算符的连接。 第一个像这样 table:

combinedcode LIKE '%' + purchasecode

第二个

combinedcode LIKE receiptcode + '%'

虽然这段代码在性能上可能不太好。如果可以的话,你应该改变你的数据模型

这里的问题是你的设计;你需要修复它。您正在您的列 combinedcode 中存储分隔值,在您的联结点 table.

您应该做的是将 2 个值存储在单独的列中,然后在这些值上创建外键。这看起来像这样:

CREATE TABLE dbo.Table1 (SomeID varchar(10) NOT NULL,
                         SomeValue varchar(20));
ALTER TABLE dbo.Table1 ADD CONSTRAINT PK_Table1 PRIMARY KEY (SomeID);
GO
CREATE TABLE dbo.Table2 (OtherID varchar(10) NOT NULL,
                         OtherValue varchar(20));
ALTER TABLE dbo.Table2 ADD CONSTRAINT PK_Table2 PRIMARY KEY (OtherID);
GO
CREATE TABLE dbo.JunctionTable (SomeID varchar(10) NOT NULL,
                                OtherID varchar(10) NOT NULL);
ALTER TABLE dbo.JunctionTable ADD CONSTRAINT FK_JunctionTable1 FOREIGN KEY (SomeID) REFERENCES dbo.Table1(SomeID);
ALTER TABLE dbo.JunctionTable ADD CONSTRAINT FK_JunctionTable2 FOREIGN KEY (OtherID) REFERENCES dbo.Table2(OtherID);

根据您的设计,您可能希望使结点 table 中的值是唯一的:

ALTER TABLE dbo.JunctionTable ADD CONSTRAINT PK_JunctionTable PRIMARY KEY (SomeID,OtherID);

然后,要执行您的 JOIN 操作就很简单:

SELECT {Your Columns}
FROM dbo.Table1 T1
     JOIN dbo.JunctionTable JT ON T1.SomeID = JT.SomeID
     JOIN dbo.Table2 T2 ON JT.OtherID = T2.OtherID;