EgoRusMarch
@EgoRusMarch
C++ Developer

MySQL. Как избавится от одинаковых записей (i,j и j,i) в запросе?

Задание:
Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, то есть (i,j), но не (j,i)

Вот что я написал:
SELECT pc1.model, pc2.model FROM pc AS pc1
INNER JOIN pc AS pc2
ON (pc1.speed = pc2.speed AND pc1.ram = pc2.ram AND pc1.model <> pc2.model);

Вот что я получил:
+--------+--------+
| model  | model  |
+--------+--------+
| ASUS4  | Intel4 |
| Intel4 | ASUS4  |
| AMD4   | AMD3   |
| AMD3   | AMD4   |
+--------+--------+

Вот что нужно получить:
+--------+--------+
| model  | model  |
+--------+--------+
| ASUS4  | Intel4 |
| AMD4   | AMD3   |
+--------+--------+
  • Вопрос задан
  • 2098 просмотров
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега MySQL
Не совсем указанным способом, но на мой взгляд решает задачу.
Запрос ищет все модели, у которых совпадают значения RAM и SPEED. Также, я не стал ограничиваться парами, так как моделей может быть более двух.

SELECT 
	GROUP_CONCAT(pc.`model` SEPARATOR ', ') AS 'models',
	pc.`speed`,
	pc.`ram`
FROM pc
GROUP BY pc.`speed`, pc.`ram`
HAVING COUNT(*) >= 2
Ответ написан
EgoRusMarch
@EgoRusMarch Автор вопроса
C++ Developer
SELECT pc1.model, pc2.model FROM pc AS pc1
INNER JOIN pc AS pc2 ON (pc1.speed = pc2.speed 
	                AND pc1.ram = pc2.ram
	                AND pc1.model < pc2.model);
/* Чтобы избавится от повторений (i,j) и (j,i)
   нужно было заменить pc1.model <> pc2.model
					на pc1.model < pc2.model */
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы