[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Какие вариации этого запроса возможны
chee
Ради повышения скила и проверки себя на прочность решал повыполнять тестовые задания.

Взял задания от *однойоченьизвестнойкомпании* по MYSQL
Цитата

Есть таблица товаров.

CREATE TABLE `goods` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Она содержит следующие значения.

`id` `name`
1 Яблоки
2 Яблоки
3 Груши
4 Яблоки
5 Апельсины
6 Груши

Напишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например:

(1,2), (4,1), (2,4), (6,3)

При решении задачи необходимо учесть, что пары (x,y) и (y,x) — одинаковы.

Приведите несколько вариантов решения задачи, какой вариант будет работать быстрее? Почему?


Смог написать лишь вариации, одного и того же по смыслу запроса


SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1
INNER JOIN
goods AS g2
ON
g1.name = g2.name AND
g1.id < g2.id;

---

SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1
LEFT JOIN
goods AS g2
ON
g1.name = g2.name AND
g1.id < g2.id
WHERE
g2.id IS NOT NULL;

---

SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1,
goods AS g2
WHERE
g1.name = g2.name AND
g1.id < g2.id;


Плюс работают они практически одинаково, проседает лишь тот что с left join.

Какие вариации могли бы вы предложить?

P.S: Кому влом создавать структуру с данными, то вот все сразу

CREATE TABLE IF NOT EXISTS `goods` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;



INSERT INTO `goods` (`id`, `name`) VALUES
(1, 'Яблоки'),
(
2, 'Яблоки'),
(
3, 'Груши'),
(
4, 'Яблоки'),
(
5, 'Апельсины'),
(
6, 'Груши');


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.