Проблема, связанная с коррелированными подзапросами - PullRequest
0 голосов
/ 11 июля 2019

Проблема под рукой, - Получить пары моделей ПК с одинаковыми скоростями и одинаковым объемом оперативной памяти. Каждая полученная пара должна отображаться только один раз, то есть (i, j), но не (j, i). Результат: модель с большим числом, модель с меньшим числом, скоростью и оперативной памятью.

Select a.model,model, speed, hd from pc a
where (a.speed in (select speed from pc where model<>a.model and `
a.speed=speed) and a.hd in(select hd from pc  where a.model<>model and a.hd=hd))

Я пробовал множество способов, это только один из них, запрос приводил к одинаковым моделям, и каждая модель имела одинаковую скорость.

enter image description here

Вот схема базы данных:

Схема базы данных состоит из четырех таблиц: Продукт (производитель, модель, тип) ПК (код, модель, скорость, оперативная память, HD, CD, цена) Ноутбук (код, модель, скорость, оперативная память, HD, экран, цена) Принтер (код, модель, цвет, тип, цена)

Ответы [ 2 ]

3 голосов
/ 11 июля 2019

Попробуйте

select p1.model model1 
      ,p2.model model2
      ,p1.speed
      ,p1.hd 
from pc p1
join pc p2 on p1.speed = p2.speed 
    and p1.hd = p2.hd 
    and p1.model < p2.model 
0 голосов
/ 11 июля 2019

У меня есть эта идея, но я не уверен, что она сработает, вы говорите мне

select a.model, b.model, a.speed, a.hd from model a
left join (select model, speed, hd from model) b on a.speed = b.speed and a.hd = b.hd
where a.model <> b.model
...