将两个 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;
我正在尝试将两个 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;