[英]How can I link my Junction table to my main table
我有一个SQL数据库,其主表名为Results。 该表存储每晚运行的测试结果的记录。
“结果”表具有许多字段,但是对于参数来说,让我们暂时说它看起来像这样:
我希望能够记录的是在运行的测试中使用的标签列表。 每个结果的标签可能不同,并且存储了它们的数组。
我创建了一个联结表,如下所示,称为“标签”:
所以我想做的就是将这两个链接在一起。 老实说,我对数据库不是很好。
我当时在想,当我遍历每个标签并将标签保存到新表中后,立即用普通的SQL查询保存测试结果时,也许我错了吗?
伪代码:
//Returned from previous SQL statement that inserted results values into the DB
int ResultID = SQLQueryReturnValue;
Foreach TAG in TAGS
{
string SQLQuery = "INSERT INTO TAGS (ResultID, ScenarioTag, FeatureTag)(@ResultID, @ScenarioTag, @FeatureTag)";
CmdSql.Parameters.AddWithValue("@ResultID", ResultID);
CmdSql.Parameters.AddWithValue("@ScenarioTag", TAG.Scenario);
CmdSql.Parameters.AddWithValue("@FeatureTag", TAG.Feature);
CmdSql.CommandText = SQLQuery;
CmdSql.Execute();
}
以下是每个表格的实际示例:
Results Table
|ResultID | Result |
| 10032 | Pass |
| 10031 | Fail |
| 10030 | Fail |
Tags Table
| TagID | ResultID | ScenarioTag | FeatureTag |
| 6 | 10032 | Cheque | Trading |
| 5 | 10032 | GBP | Sales |
| 4 | 10031 | Direct Credit | Trading |
| 3 | 10031 | GBP | Purchase |
| 2 | 10030 | Wire | Dividends |
| 1 | 10030 | USD | Payments |
所以最后我的问题...是一种可以将新的“标签”表物理链接到结果表的方法。 它使用ResultID的形式进行非正式链接,但没有物理链接。
您要寻找的吗? (假设:此查询从结果中查找。它们不一定必须具有标签...)
SELECT *
FROM Results
LEFT JOIN Tags ON Results.ResultID=Tags.ResultID
编辑:也许我听不懂,“物理地”是什么意思。 您可以添加外键约束:
ALTER TABLE Tags ADD CONSTRAINT FK_Tags_Results FOREIGN KEY (ResultID) REFERENCES Results(ResultID);
此约束向这些表添加了一个关系,请确保“标记”中仅允许结果中存在的值作为“ ResultID”。 另一方面,您不能删除“标签”中现有子项的“结果”行。
如果执行此操作,则可以将顶部查询更改为:
SELECT *
FROM Tags
INNER JOIN Results ON Results.ResultID=Tags.ResultID
现在,您正在从“标记”(前导表)中查找,并且您知道每个标记都必须具有一个ResultID(“内部联接”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.