有人能简单解释一下这两个表之间的关系吗
Can someone shortly explain the relationship between these two tables
-我想在这两个 table 之间建立关系。
-如您所见,这两个 table 理论上相互关联。
-table两个ser_id是在table行'value'下找到一个。
但仅在名称为 'Apliance' 的列中。
-我如何建立参考以及这是什么类型的关系。对我来说,在 'value' 和 'ser_id'
之间创建引用是合乎逻辑的
-我目前正在与 mysql workbench
合作
简单地说,这些表并没有真正的关系,不是为关系数据库定义的。
如果您只想确定表 2 中的每个 ser_ID 是否在表 1 中找到,请在 Table1.value 和 Table2.ser_ID(日期和加载时间)上通过 JOINing 执行“查找不匹配”查询Table1 的记录将被删除)。
SELECT Table2.* FROM Table2
LEFT JOIN Table1 ON Table2.ser_id = Table1.value
WHERE Table1.value Is Null;
或:
SELECT * FROM Table2 WHERE ser_ID NOT IN (SELECT [value] FROM Table1);
Table1 是一个entity/attribute/value 结构,虽然实体没有明确标识(可能是一些事件,例如测试?)。我假设:
- 每组连续的 3 条记录都与同一实体相关联,并且每组中始终有 3 条记录且只有 3 条记录
- Apliance 值在表 1 中没有重复,ser_id 在表 2 中也没有重复
- 指数始终为正且递增。
基于这些假设,使用 DCount() 的 Access CROSSTAB 查询可以将 Table1 数据重新排列为规范化结构(具有讽刺意味的是 CROSSTAB 通常对数据进行反规范化)。
TRANSFORM First(Table1.value) AS FirstOfvalue
SELECT DCount("*","Table1","[name]='" & [name] & "' AND [index]<" & [index])+1 AS GrpID
FROM Table1
GROUP BY DCount("*","Table1","[name]='" & [name] & "' AND [index]<" & [index])+1
PIVOT Table1.name;
GrpID Apliance date loadtime
1 x4500 01.01.2005 14:00:00 44
2 x4501 01.01.2005 14:00:14 60
嵌套查询可以计算组标识符:
SELECT Table1.name, Table1.value,
(SELECT Count(*) AS Seq FROM Table1 AS Dup
WHERE Dup.Name=Table1.Name AND Dup.Index<Table1.Index)+1 AS GrpID
FROM Table1;
不幸的是,使用该查询作为 CROSSTAB 的源失败。
MySQL 没有 DCount() 函数。嵌套查询应该是可能的,但是,我不知道它是否可以被透视,因为我不能让它在 Access 中工作。
CROSSTAB 的替代方法是使用嵌套查询作为聚合查询的源,聚合查询计算字段以模拟 CROSSTAB:
SELECT Query1.GrpID,
Max(IIf([name]="Apliance",[value],Null)) AS Apliance,
Max(IIf([name]="date",[value],Null)) AS [date],
Max(IIf([name]="loadtime",[value],Null)) AS loadtime
FROM
(SELECT Table1.name, Table1.value,
(SELECT Count(*) AS Seq FROM Table1 AS Dup
WHERE Dup.Name=Table1.Name AND Dup.Index<Table1.Index)+1 AS GrpID
FROM Table1) AS Query1
GROUP BY Query1.GrpID;
-我想在这两个 table 之间建立关系。
-如您所见,这两个 table 理论上相互关联。
-table两个ser_id是在table行'value'下找到一个。 但仅在名称为 'Apliance' 的列中。
-我如何建立参考以及这是什么类型的关系。对我来说,在 'value' 和 'ser_id'
之间创建引用是合乎逻辑的-我目前正在与 mysql workbench
合作简单地说,这些表并没有真正的关系,不是为关系数据库定义的。
如果您只想确定表 2 中的每个 ser_ID 是否在表 1 中找到,请在 Table1.value 和 Table2.ser_ID(日期和加载时间)上通过 JOINing 执行“查找不匹配”查询Table1 的记录将被删除)。
SELECT Table2.* FROM Table2
LEFT JOIN Table1 ON Table2.ser_id = Table1.value
WHERE Table1.value Is Null;
或:
SELECT * FROM Table2 WHERE ser_ID NOT IN (SELECT [value] FROM Table1);
Table1 是一个entity/attribute/value 结构,虽然实体没有明确标识(可能是一些事件,例如测试?)。我假设:
- 每组连续的 3 条记录都与同一实体相关联,并且每组中始终有 3 条记录且只有 3 条记录
- Apliance 值在表 1 中没有重复,ser_id 在表 2 中也没有重复
- 指数始终为正且递增。
基于这些假设,使用 DCount() 的 Access CROSSTAB 查询可以将 Table1 数据重新排列为规范化结构(具有讽刺意味的是 CROSSTAB 通常对数据进行反规范化)。
TRANSFORM First(Table1.value) AS FirstOfvalue
SELECT DCount("*","Table1","[name]='" & [name] & "' AND [index]<" & [index])+1 AS GrpID
FROM Table1
GROUP BY DCount("*","Table1","[name]='" & [name] & "' AND [index]<" & [index])+1
PIVOT Table1.name;
GrpID Apliance date loadtime
1 x4500 01.01.2005 14:00:00 44
2 x4501 01.01.2005 14:00:14 60
嵌套查询可以计算组标识符:
SELECT Table1.name, Table1.value,
(SELECT Count(*) AS Seq FROM Table1 AS Dup
WHERE Dup.Name=Table1.Name AND Dup.Index<Table1.Index)+1 AS GrpID
FROM Table1;
不幸的是,使用该查询作为 CROSSTAB 的源失败。
MySQL 没有 DCount() 函数。嵌套查询应该是可能的,但是,我不知道它是否可以被透视,因为我不能让它在 Access 中工作。
CROSSTAB 的替代方法是使用嵌套查询作为聚合查询的源,聚合查询计算字段以模拟 CROSSTAB:
SELECT Query1.GrpID,
Max(IIf([name]="Apliance",[value],Null)) AS Apliance,
Max(IIf([name]="date",[value],Null)) AS [date],
Max(IIf([name]="loadtime",[value],Null)) AS loadtime
FROM
(SELECT Table1.name, Table1.value,
(SELECT Count(*) AS Seq FROM Table1 AS Dup
WHERE Dup.Name=Table1.Name AND Dup.Index<Table1.Index)+1 AS GrpID
FROM Table1) AS Query1
GROUP BY Query1.GrpID;