MySQL将每个元组与相同关系中的每个元组进行比较

时间:2012-04-03 22:57:16

标签: mysql sql

关系: 产品(制造商,型号,型号) 笔记本电脑(型号,价格,速度,内存,高清,屏幕) PC(型号,价格,速度,内存,高清) 打印机(型号,价格,颜色,价格)

我试图找到同时拥有相同速度和相同内存的PC。

我尝试过:

SELECT model FROM pc WHERE pc.speed = pc.speed AND pc.ram = pc.ram;

这又是(如果你从今天开始看到我的问题列表),这是错误的语法。

我想将pc中的每个元组与pc中的每个元组进行比较,并根据pc的速度和ram共享其他元组创建一个新的关系。

1 个答案:

答案 0 :(得分:1)

SELECT pc1.model, pc2.model 
FROM 
    pc pc1 
    JOIN pc pc2 
        ON pc1.speed = pc2.speed 
        AND pc1.ram = pc2.ram
        AND pc1.model <> pc2.model

请注意,每次匹配都会返回两行... A <-> BB <-> A。如果要阻止此操作,可以将查询更改为以下内容:

SELECT pc1.model, pc2.model 
FROM 
    pc pc1 
    JOIN pc pc2 
        ON pc1.speed = pc2.speed 
        AND pc1.ram = pc2.ram
        AND pc1.model > pc2.model