我正在做一些书本练习,找不到关于如何在关系代数中表达以下内容的解释。虽然我确实找到了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
我根据以下公式构造的关系代数表达式:
因此,在SQL查询和关系代数中,匹配结果将被列出两次,但顺序相反。我如何使其仅被列出一次,而与顺序无关?
只需使用if PC.model != PC1.model,则其中一个小于另一个的事实。因此,如果您需要这些对中的一对,则只需使用PC.model < PC1.model或PC.model > PC1.model(取决于要保留的对)。
PC.model != PC1.model
PC.model < PC1.model
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;