我正在做一些书本练习,但找不到有关如何用关系代数表达以下内容的解释。我确实找到了一个不过 SQL 的答案但我感兴趣的是是否有其他方法可以解决这个问题。
书中的问题是:找到那些具有相同速度和 RAM 的 PC 型号对。一对只能列出一次;例如,列出 (i,j) 但不列出 (j,i)。
PC 的架构是:
PC (
model INTEGER NOT NULL PRIMARY KEY,
speed NUMERIC,
ram INTEGER,
hd INTEGER,
price INTEGER);
和我提出的查询:
SELECT PC.model, PC1.model
FROM PC, PC AS PC1
WHERE PC.model != PC1.model AND PC.speed = PC1.speed AND PC.ram = PC1.ram;
返回:
model | model
-------+-------
1004 | 1012
1012 | 1004
我构建的关系代数表达式是:
- 定义名为 PC1 的 PC 副本,并将属性“model”重命名为“model1”。
- 项目 PC 的型号、速度和内存以及 PC1 的型号 1、速度和内存。
- PC 和 PC1 的上述投影之间进行 Theta 连接,条件是 model != model1。
- (3) 中结果的项目模型和模型 1。
因此,在 SQL 查询和关系代数中,匹配结果都会列出两次,但顺序相反。如何使其无论顺序如何只列出一次?
只需使用以下事实:如果PC.model != PC1.model
,那么一个比另一个小。因此,如果您需要其中一对,只需使用其中之一PC.model < PC1.model
or PC.model > PC1.model
(取决于您要保留哪一对)。
SELECT PC.model, PC1.model
FROM PC, PC AS PC1
WHERE PC.model < PC1.model AND PC.speed = PC1.speed AND PC.ram = PC1.ram;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)