当前位置: 首页 > 面试题库 >

如何只列出每对元组一次,而不管SQL和关系代数中的列顺序如何?

山阳辉
2023-03-14
问题内容

我正在做一些书本练习,找不到关于如何在关系代数中表达以下内容的解释。虽然我确实找到了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

我根据以下公式构造的关系代数表达式:

  1. 定义一个名为PC1的PC副本,并将属性“ model”重命名为“ model1”。
  2. 项目模型,PC和模型1的速度和内存,PC1的速度和内存。
  3. 在模型!= model1的条件下,PC和PC1的上述投影之间的Theta连接。
  4. 根据(3)中的结果投影模型和model1。

因此,在SQL查询和关系代数中,匹配结果将被列出两次,但顺序相反。我如何使其仅被列出一次,而与顺序无关?


问题答案:

只需使用if PC.model != PC1.model,则其中一个小于另一个的事实。因此,如果您需要这些对中的一对,则只需使用PC.model < PC1.modelPC.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;


 类似资料:
  • 问题内容: 我有一个像这样的元组列表(总是成对出现): 我想找到每对中第一项的总和,即: 如何在Python中执行此操作?目前,我正在遍历列表: 我觉得必须有一种更Python化的方式。 问题答案: 与Python 2.3兼容的版本是 或在最新版本的Python中,请参见此答案。 也会做。

  • 此外,在每个迭代中,个体随机配对,例如: 并且这些配对有可能会有一个子,它将作为下一个数字(11,12等)添加到列表中 每一对可能只出现一次,所以我必须存储每一对,在随机选择两个个体后,检查他们是否已经是一对了。

  • 有没有办法用熊猫来计算某个值在每一列中出现的次数? 数据= pd。DataFrame({'userID':['Luis ',' Mike ',' Harvey'],' category1':[True,False,True],' category2': [True,True,False],' category3':[False,False,False]}) 假设我想计算每个类别中“真”布尔值的数量

  • 我发现了许多关于比较列表对象而不管其元素的顺序如何的问题和答案,但我的问题更复杂:我有两个bean,其中包含一个列表。我希望对这两个bean执行assertEquals,而不管内部列表中元素的顺序如何。有没有一个简单的方法可以做到这一点?

  • 我正在php上研究多对多关系,我有3个表,包括电影名称和电影id的movie表genre表包括类型和类型id的movie_genre表包括电影id和类型id的movie_genre表 genre表有这些值 我使用下面的代码来获取数据 但结果将类似于 movie_id movie_name genre[1] movie_id movie_name genre[2] movie_id movie_na

  • 问题内容: 我有以下代码片段,我不明白为什么它不起作用: 有人能指出我正确的方向吗? 我已经看到JonSkeet在另一个问题上的回答,但是那里的最后一个示例对我来说不起作用。即使我将强制类型转换添加到标记为的行或行中,也会出现编译错误。 问题答案: 您始终可以通过明确指定type参数来告诉Java您想要列表: